按下按钮时,Intent不会调用

时间:2017-12-28 06:32:05

标签: java android-intent android-context

我有以下代码。我正在调用主要活动的第二个活动。每当按下发送按钮我想要一个toast to show按钮被按下并开始活动。但是由于一些上下文问题只有toast是出现。请纠正意图的背景,并对这些背景做一些明确的解释。

MainActivity.java

public class MainActivity extends AppCompatActivity {

public final static String EXTRA_MESSAGE="com.example.iamka.androiddevelop.MESSAGE";
public void Toast1(String s){
    Toast.makeText(this,s+" is called",Toast.LENGTH_SHORT).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d("My app","onCreate is called");
    Toast1("onCreate");
    Button btn=(Button)findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("My app","Button is pressed");
            Toast.makeText(MainActivity.this,"Button pressed",Toast.LENGTH_SHORT).show();
        }
    });
}
public void sendMessage(View view) {
    // Do something in response to button
    Intent intent = new Intent(MainActivity.this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.editText);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    Log.i("intent","intent is started");
    startActivity(intent);
}
}

DisplayMessageActivity.java

public class DisplayMessageActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_message);
    // Get the Intent that started this activity and extract the string
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    // Capture the layout's TextView and set the string as its text
    TextView textView =(TextView) findViewById(R.id.textView);
    Log.i("intent","displaymessage");
    textView.setText(message);
}
}

activity_main.xml中

<EditText
    android:id="@+id/editText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:ems="10"
    android:hint="@string/edit_message"
    android:inputType="textPersonName"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintRight_toLeftOf="@+id/button"
    app:layout_constraintHorizontal_chainStyle="spread" />

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="16dp"
    android:onClick="sendMessage"
    android:text="@string/button_send"
    app:layout_constraintBaseline_toBaselineOf="@+id/editText"
    app:layout_constraintLeft_toRightOf="@+id/editText"
    app:layout_constraintRight_toRightOf="parent" />

activity_display_message.xml

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:text="TextView"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

当我删除onClickListener()方法时,意图正在运行。

3 个答案:

答案 0 :(得分:2)

只需删除--with-openssl按钮即可。您必须在xml或类文件中设置单击侦听器。它都不会起作用

setup.py install

在您的活动中更改此内容:

android:onClick="sendMessage"

答案 1 :(得分:2)

由于您要设置自己的View.OnClickListener,因此您要从XML定义中删除该android- multi onClick listener in one button1536m仅支持一个Button。首先,XML将从View.OnClickListener属性中创建一个,如:

android:onclick

然后你用btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendMessage(v); } }); 设置你的。该按钮仅保留最后一个按钮,因此永远不会发送Toast

解决方案:

  • 在您的侦听器中调用Intent方法

像:

sendMessage
  • 删除侦听器以保留由btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("My app","Button is pressed"); Toast.makeText(MainActivity.this,"Button pressed",Toast.LENGTH_SHORT).show(); sendMessage(v); //Or anywhere in that method, your call. } }); 创建的侦听器。

供参考:

通常android:onclick方法意味着这不支持多个值,set###方法。

此外,如果您愿意,可以在 {{3}} 处查看以实现您自己的多侦听器按钮。但我没有检查是否有更新的更新......

答案 2 :(得分:-1)

只需复制粘贴以下MainActivity代码即可完成工作。首先加载xmls,然后在运行时再次将onclick监听器设置为按钮。所以xmls onclick已被java代码中的onclick监听器所取代。因此你得到了吐司,但sendMessage()从未被调用

   public class MainActivity extends AppCompatActivity {

   public final static String EXTRA_MESSAGE="com.example.iamka.androiddevelop.MESSAGE";
public void Toast1(String s){
Toast.makeText(this,s+" is called",Toast.LENGTH_SHORT).show();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("My app","onCreate is called");
Toast1("onCreate");
Button btn=(Button)findViewById(R.id.button);

}
public void sendMessage(View view) {
// Do something in response to button
Intent intent = new Intent(MainActivity.this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.editText);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
Log.i("intent","intent is started");
startActivity(intent);
}
}