我正在尝试在ListView中创建一个具有多个选项的项目;查看和编辑。我想以与android的联系人系统完全相同的方式创建它 - 见下文:
我添加了红框以说明我想要的行为。如果您在左侧红框内按,则呼叫联系人。如果您在右侧红框内按,则会向联系人发送短信。我已经在XML中创建了一个类似的布局,但是我在代码中实现这个功能时遇到了麻烦。
我试图为项目中的单独布局创建自定义android:onClick函数调用,但调用onClick方法只允许您将View作为参数传入,而不是传递位置。需要使用listview.getItemAtPosition函数的位置,我试图使用listview.getPositionForView返回位置,但发现这非常不稳定,并且由于视图的回收而很容易返回错误的定位。
然后我尝试将项目的位置设置为适配器的getView
方法中的“标记”,如下所示:convertView.setTag(position)
。但是在我的活动的onClick
方法中,我尝试使用getTag
并将其强制转换为整数,并且它总是返回null,我觉得这很令人费解。
在每个项目上实现由具有多个按钮/布局的项目填充的列表的最佳方法是什么?
答案 0 :(得分:1)
您可以在行中的每个视图上创建一个onClick事件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/text_id"
android:layout_width="0sp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:onClick="textOnClickEvent"/>
<ImageButton
android:id="@+id/button_id"
android:layout_width="@dimen/width_button"
android:layout_height="match_parent"
android:onClick="imageOnClickEvent"
android:src="@android:drawable/ic_menu_delete" />
</LinearLayout>
甚至,在getView方法的每个视图上添加onClick侦听器......
有关此here的更多信息。
答案 1 :(得分:0)
在定义getview方法的列表视图中,您可以在此处提供单个列表项的所有详细信息。在那里你可以提到每个视图的onlick事件。
答案 2 :(得分:0)
在适配器类中,将View.OnClickListener
添加到getView
方法:
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(view == null) {
final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
view = layoutInflater.inflate(R.layout.grid_vendor_item, null);
}
final TextView textName = (TextView) view.findViewById(R.id.text_id);
final ImageButton imageProfil = (TextView) view.findViewById(R.id.button_id);
textName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// add your edit codes
}
});
imageProfil.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// add your open prodil codes
}
});
return view;
}