按下按钮时不调用 Intent

Intent is not calling when button is pressed

我有下面的一段 codes.I 我正在从主 activity 调用第二个 activity.Whenever 发送按钮被按下 我想祝酒词显示按钮被按下并启动 activity.But 由于某些上下文问题,只有 toast 是 appearing.Please 更正意图的上下文并对这些上下文给出一些明确的解释。

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() 方法时,意图就起作用了。

只需删除按钮的 android:onClick="sendMessage" 并尝试。您必须在 xml 或 class 文件中设置点击侦听器。两者都不行

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

在您的 Activity 中更改此设置:

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();
        }
    });

private void sendMessage() {
    // 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);
}

由于您要设置自己的 View.OnClickListener,因此您要从 XML 定义中删除它。 Button只支持一个View.OnClickListener。首先,XML 将从 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### 方法表示不支持多值,add### 方法支持。

此外,如果您愿意,可以在 android- multi onClick listener in one button 查看以实现您自己的多监听器按钮。但是我没有检查是否有更多最新的...

只需复制粘贴以下 MainActivity 代码即可完成工作。首先加载 xml,然后在运行时再次将 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);
}
}