按下按钮时不调用 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);
}
}
我有下面的一段 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);
}
}