gpt4 book ai didi

android - 是否可以从 ListView fragment 而不是 ListView 适配器获取按钮 View ?

转载 作者:行者123 更新时间:2023-11-30 03:28:02 25 4
gpt4 key购买 nike

我有这个:

enter image description here

红色方 block 是包含多个 fragment 的 Activity ,几乎所有 fragment 都是列表,它们都有不同的项目,但由我的自定义 ListAdapter 类构建。

橙色方 block 是其中一个 fragment ,实际上它是一个正确的drawer .此 fragment 从 ListFragment 扩展而来,并扩展了一个没有项目的简单 xml。

在 fragment 的 onActivityCreated 内部,我实例化了一个自定义 ListAdapter,我用您在屏幕截图中看到的项目填充它。

根据我想要的项目类型,我有几个 xml,在这里你可以看到其中的 3 个:

  • 按钮标题(绿色方 block )
  • 可勾选项目(右边可以有勾选图标的项目)
  • 常规标题(写着“Día y hora del viaje”的标题)

按钮标题(绿色方 block )xml是一个简单的线性布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_row_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<ImageButton
android:id="@+id/row_button"
android:layout_width="45dp"
android:layout_height="45dp"
android:padding="10dp" />

<TextView
android:id="@+id/row_title"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:minLines="1"
android:padding="10dp"
android:textAppearance="@android:style/TextAppearance.Medium"
android:textStyle="bold" />

</LinearLayout>

我想要做的是从橙色方 block (我的自定义 ListFragment 类)访问按钮以设置点击监听器。我已经进行了研究,我知道我可以通过适配器做到这一点(我已经成功地尝试过),但这是我不想要的,因为在其他菜单中我会有其他行为不同的按钮,但它们是将调用相同的监听器,因为它们是由相同的适配器构建的。

我在给 Fragment 充气后试过:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.menu_list, null);
//Button of location settings
((ImageButton)fragmentView.findViewById(R.id.row_button)).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//Do here stuff I want to
}
});
super.onStart();
return fragmentView;
}

同样来自 onStart:

@Override
public void onStart() {
//Button of location settings
((ImageButton)getView().findViewById(R.id.row_button)).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//Here my stuff
}
});
super.onStart();
}

也在 setListAdapter()

之后
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//A new instance of my own ListAdapter
MyListAdapter adapter = new MyListAdapter(getActivity());
//Prepare my items and its propierties within adapter
//...
//Set the Adapter
setListAdapter(adapter);
//And then try to get the Button view
//Button of location settings
((ImageButton)getView().findViewById(R.id.row_button)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//My stuff here
}
});
}

但是你猜怎么着……我总是在 xml 膨胀 fragment 时遇到同样的错误。如果我删除设置点击监听器的行,它会起作用,但显然按钮什么都不做。

非常感谢任何帮助。

最佳答案

这是评论的答案:

您的按钮位于 ListView 的一行中,因此您只能从列表适配器中找到它(在 getView() 中)。从 fragment 调用 findViewById() 无法返回 ListView 中包含的 View 。

一种解决方案是在膨胀时为按钮设置标签,然后在单击按钮时根据标签执行某些操作。

关于android - 是否可以从 ListView fragment 而不是 ListView 适配器获取按钮 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com