我有一个自定义适配器,因为我连续有两个Textview。首先,我只想要左侧TextViews可点击并禁用右侧的点击事件。
layout_list_xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView style="@style/TextDesign"
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/left" />
<TextView style="@style/TextDesign"
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:id="@+id/right" />
</RelativeLayout>
</LinearLayout>
自定义适配器:
public class CustomAdapter extends BaseAdapter {
Context context;
List<Occurence> occurenceList;
TextView left, right;
public CustomAdapter(Context context, List<Occurence> occurenceList) {
this.context = context;
this.occurenceList = occurenceList;
}
@Override
public int getCount() {
return occurenceList.size();
}
@Override
public Object getItem(int position) {
return occurenceList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=LayoutInflater.from(context);
View v=inflater.inflate(R.layout.layout_list,parent,false);
left=(TextView) v.findViewById(R.id.left);
right=(TextView) v.findViewById(R.id.right);
left.setText(occurenceList.get(position).singleNumber);
right.setText(occurenceList.get(position).occurence+" occurence");
v.setTag(occurencekList.get(position).getId());
return v;
}
@Override
public boolean areAllItemsEnabled() {
return super.areAllItemsEnabled();
}
@Override
public boolean isEnabled(int position) {
return super.isEnabled(position);
}
}
因此,当用户点击TextView时,我想要禁用List上TextView的单击。点击的电视的值将作为SpannableString移动到另一个TextView,我可以在其中执行另一个操作。这意味着如果用户单击将删除该SpannableString的SpannableString并重新启用已禁用的ListItem的单击操作。
我在下面附上了一张图片,看看结果。
我已经读过我应该在适配器类中名为isEnabled的Override方法中放置一个if语句,但我需要具体的解决方案。
答案 0 :(得分:1)
直接在TextView上设置ClickListener。由于ClickListener在触发时获得单击的View作为参数,因此您可以在发生时立即禁用侦听器。
在getView
方法中
left.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setOnClickListener(null); // This disables the click right away
}
});
答案 1 :(得分:0)
您可以在左侧TextView中设置单击侦听器,执行必须执行的操作,然后在需要之前删除侦听器。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=LayoutInflater.from(context);
View v=inflater.inflate(R.layout.layout_list,parent,false);
left=(TextView) v.findViewById(R.id.left);
left.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//In here your data treatment
left.setOnClickListener(null);
}
});
right=(TextView) v.findViewById(R.id.right);
left.setText(occurenceList.get(position).singleNumber);
right.setText(occurenceList.get(position).occurence+" occurence");
v.setTag(occurencekList.get(position).getId());
return v;
}
请记住,如果您使用Java 8,则可以将侦听器更改为lambda表达式并保存一些行。
答案 2 :(得分:0)
我解决了如何禁用listItem单击并在需要时启用它。 将boolean变量添加到自定义列表中的每个项目,并在适配器类中创建一个布尔实例。
MYSQL_BIND
在main_activity.java中,调用list.onItemClickListener
nullptr
如果你想将这个位置设置为可点击,只需将你的布尔值设置为true,然后isEnabled方法将为该位置返回true。
我希望将来对某人有用。