OnClickListener不支持使用setContentView自定义导入视图
android应用程序有activity和activit_layout。然后我在activity_layout上放置了三个按钮,并为每个按钮设置了“onclicklistener”,以便打开不同的自定义视图。每个按钮都使用“onclicklistener”方法中的“setContentView”方法为Activity设置特定的布局文件,并且它们工作得很好。然后,这些每个自定义布局上都有sperate textview。一旦agian,我想设置“setOnClickListener”为这些每个textviews是自定义布局文件,separatelty和执行不同的任务。问题是当我点击文本视图时,什么也没有发生。我不知道天气文本被识别或“onclicklistener”方法不起作用。我在下面附上我的代码文件。
活动java文件:-
public class beverbs extends AppCompatActivity
{
private int layout = 0; // interger for custom layout file
TextView text1; // textview is on the custom layoutfile
View view1; // custom Layout file
@SuppressLint("InflateParams")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
view1 = LayoutInflater.from(getBaseContext()).inflate(R.layout.custome_layout,null);
text1 = view1.findViewById(R.id.textView12);
text1.setOnClickListener(new OnClickListener() // this part does not work
{
@Override
public void onClick(View view)
{
// do something
}
});
}
public void open_new_layout(View view) // onclick methode
{
layout = 1;
setContentView(R.layout.custome_layout); // button on main layout set custom layout the activity
}
@Override
public void onBackPressed()
{
if (layout==1)
{
layout = 0;
setContentView(R.layout.activity_layout); // set original layout again
}
else
{
super.onBackPressed();
}
}
}
活动XML文件:-
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="open_new_layout"
android:text="Open Layout"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
自定义布局XML文件:-
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Perform Task"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
请任何人帮助我与这种天气有另一种方式来完成我的任务。
我在互联网上寻找任何解决方案,但没有得到任何关于这一点。
1条答案
按热度按时间gmxoilav1#
您正在膨胀一个布局(
custome_layout.xml
)并在其TextView
上设置一个点击侦听器,但实际上并没有显示膨胀的布局-因此用户无法点击它!我猜你实际上想在
activity_layout
中的Button
上设置点击监听器:这里的一个问题是,您使用的是带有布局资源ID的
setContentView
,如setContentView(R.layout.activity_layout)
。这将获取XML文件,* 膨胀 * 其布局(即创建XML文件中描述的View
对象并将它们连接起来),最后显示View
对象的最终层次结构。当您找到
button
并在其上设置单击侦听器时,* 您将其设置在特定的View
对象上 *。如果你再次调用setContentView(R.layout.activity_layout)
(就像在你的'back'函数中一样),那么 * 它会膨胀一组新的View
对象 *。ID为button5
的Button
在您重新设置它之前不会设置单击侦听器,因为它是一个全新的对象。你有两个选择。您可以手动地扩展每个视图层次结构并存储它们(就像您在
onCreate
中对R.layout.custome_layout
所做的那样),然后调用setContentView(view1)
等,即传递 * 一组Views
用于显示 *。这样,由于您使用的是相同的对象,因此仍然会设置任何单击侦听器。另一个选择是做你正在做的事情,调用
setContentView(R.layout.activity_layout)
,但是每次调用它时都运行你的设置代码(添加点击监听器等)--你正在膨胀新的对象,所以每次都需要设置它们。最简单的方法是创建一个像showMainLayout()
这样的方法,它有setContentView
和setOnClickListener
代码,当你想显示这个布局时调用它。或者你可以使用
Fragment
s,然后在它们之间进行交换--这类东西是它们的主要用途。