提问人:Siddarth Patil 提问时间:5/27/2020 最后编辑:Kasım ÖzdemirSiddarth Patil 更新时间:5/27/2020 访问量:442
setOnClickListener 未按预期工作
setOnClickListener not working as expected
问:
首先,我是android的新手。
我的应用程序中有三个活动。即 MainActivity、TC 和 navigation_drawer。
用户在开始时进入MainActivity,提供他/她的名字,并在单击按钮时输入TC(工作正常)。在TC内部有两个按钮“同意”,“不同意”,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TC">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/agree"
android:text="Agree"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/not_agree"
android:text="Do not Agree"
android:layout_below="@id/agree"/>
</RelativeLayout>
现在,如果用户单击“同意”,它应该转到“navigation_drawer”,如果单击“不同意”,它应该返回到 MainActivity。它的代码是:
public class TC extends AppCompatActivity {
private Button Agree, NotAgree;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_t_c);
Agree = (Button) findViewById(R.id.agree);
NotAgree = (Button) findViewById(R.id.not_agree);
Agree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TC.this, "Agree", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(TC.this, navigation_drawer.class);
startActivity(intent);
}
});
NotAgree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TC.this, "Not Agree", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(TC.this, MainActivity.class);
startActivity(intent);
}
});
}
}
添加 Toast 只是为了检查是否调用了正确的方法(并且它正在调用正确的方法)
AndroidManifest.xml包含(我不确定这是否有帮助):
<activity android:name=".TC" android:noHistory="true"/>
<activity android:name=".navigation_drawer" />
<activity
android:name=".MainActivity"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
问题是,出于某种原因,无论我单击哪个按钮,它总是重定向到navigation_drawer对于这两个按钮,Toast 消息也按预期显示。
我不知道我在这里错过了什么,请提出一个解决方案。谢谢。
答:
0赞
Kidus
5/27/2020
#1
我看不出您的代码有什么问题,应该可以工作,但似乎您在两次单击按钮时都启动了活动。navigation_drawer
因此,我建议您通过为每个变量提供不同的名称(例如 and)来声明和初始化块外的两个按钮的变量,然后再次尝试运行它。Intent
setOnClickListner()
Intent
intent1
intent2
0赞
mohosyny
5/27/2020
#2
测试这个:
删除android:noHistory="true"
Manifest
和通话后startActivity(....)
finish()
评论
Button Agree = (Button)findViewById(R.id.agree);
还要确保链接到正确的 xml。设置内容视图。navigation_drawer
MainActivity
navigation_drawer