2017-07-25 65 views
0

我一直在试图找出我自己2天内出现的问题,但第二个活动不会启动按钮单击,没有错误消息,没有空白页面,就好像按钮不会没有工作,我错过了明显的东西吗?新活动没有响应

public class createMessage extends AppCompatActivity { 
    public static final String EXTRA_MESSAGE = "message"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_create_message); 
    } 

    Button b ; 

    public void clickSend(){ 
     b = (Button) findViewById(R.id.send); 
     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(createMessage.this,receiveMessage.class); 
       startActivity(intent); 
       EditText editText = (EditText) findViewById(R.id.typeMessage); 
       String message = editText.getText().toString(); 
       intent.putExtra(EXTRA_MESSAGE, message); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

次活动:

public class receiveMessage extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_receive_message); 


     // Get the Intent that started this activity and extract the string 
     Intent intent = getIntent(); 
     String message = intent.getStringExtra(createMessage.EXTRA_MESSAGE); 

     // Capture the layout's TextView and set the string as its text 
     TextView textView = (TextView) findViewById(R.id.showMessage); 
     textView.setText(message); 
    } 
} 
+1

你在哪里调用'clickSend'方法? –

回答

8

必须调用onCreate()方法clickSend()方法。

然后只有onClickListener将工作。

并删除拨打startActivity(intent)两次。

变化createMessage类,如下

public class createMessage extends AppCompatActivity { 
    public static final String EXTRA_MESSAGE = "message"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_create_message); 
     clickSend(); 
    } 

    Button b ; 

    public void clickSend(){ 
     b = (Button) findViewById(R.id.send); 
     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(createMessage.this,receiveMessage.class); 
       EditText editText = (EditText) findViewById(R.id.typeMessage); 
       String message = editText.getText().toString(); 
       intent.putExtra(EXTRA_MESSAGE, message); 
       startActivity(intent); 
      } 
     }); 
    } 
    } 
+3

在你的回答中还包括OP不需要调用'startActivity(intent);'两次。 – Piyush

+1

@Piyush回答更新 – codeWorm

0

代码试试这个

public class createMessage extends AppCompatActivity { 

public static final String EXTRA_MESSAGE = "message"; 
Button b ; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_create_message); 

    b = (Button) findViewById(R.id.send); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(createMessage.this,receiveMessage.class); 
      EditText editText = (EditText) findViewById(R.id.typeMessage); 
      String message = editText.getText().toString(); 
      intent.putExtra(EXTRA_MESSAGE, message); 
      startActivity(intent); 
     } 
    }); 
} 


} 
0
public class createMessage extends AppCompatActivity { 
    public static final String EXTRA_MESSAGE = "message"; 
    Button b ; 
    EditText editText; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_create_message); 
     editText = (EditText) findViewById(R.id.typeMessage); 
     b = (Button) findViewById(R.id.send); 

     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Intent intent = new Intent(createMessage.this,receiveMessage.class); 
       String message = editText.getText().toString(); 
       intent.putExtra(EXTRA_MESSAGE, message); 
       startActivity(intent); 
      } 
     }); 
    } 
    } 
2

你需要打电话给你onCreate()方法内部clickSend()方法

编辑:请检查更新回答

public class createMessage extends AppCompatActivity { 
    public static final String EXTRA_MESSAGE = "message"; 
    Button b; 
    EditText editText; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_create_message); 
     clickSend(); 
    } 

    public void clickSend(){ 
     b = (Button) findViewById(R.id.send); 
     editText = (EditText) findViewById(R.id.typeMessage); 
     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String message = editText.getText().toString(); 
       Intent intent = new Intent(createMessage.this,receiveMessage.class); 
       intent.putExtra(EXTRA_MESSAGE, message); 
       startActivity(intent); 
      } 
     }); 
    } 
} 
+1

还包括你的答案,OP不需要调用'startActivity(intent);'两次。 – Piyush

+0

@Piyush我更新了代码 – akhilesh0707

1

已有的答案将解决问题,但我认为你需要明白为什么你的方法没有被调用。检查文档activity,您会看到一堆列出的方法,而onCreate就是其中之一。这些方法保证由系统为你调用(绝不会自己调用其中一种方法),因此不需要你给它们打电话。问题是系统不知道你的方法,并且永远不会调用它,让这个责任掌握在你的手中。

0

你应该调用从活动的生命周期方法onCreate()clickSend()方法来初始化UI元素(如按钮,的EditText等)。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_create_message); 
    clickSend(); 
} 

2.要调用startActivity()两次。更新clickSend()方法如下:

Button b ; 
EditText editText; 

public void clickSend(){ 
    b = (Button) findViewById(R.id.send); 
    editText = (EditText) findViewById(R.id.typeMessage); 

    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(createMessage.this,receiveMessage.class); 

      String message = editText.getText().toString(); 
      intent.putExtra(EXTRA_MESSAGE, message); 
      startActivity(intent); 
     } 
    }); 
}