android - Android: 自定义列表视图列表元素单击

  显示原文与译文双语对照的内容

我正在使用自定义适配器开发一个应用程序,其中的数据来自服务器,其中的数据来自服务器。 自定义适配器由图像视图最小二和最大四部分组成,取决于来自服务器的数据。 如图像中所示。

List item

根据功能,每个图像视图都有点击监听器。

如果单击列表第一项,问题为第一个图像视图会被选中,但当我单击列表第二个项目时,第二个图像视图会更改选择。 第一项的选择从第一个图像视图到第二。

而这一切。

我也尝试了 notifydatasetchange(),因为我的数据存储在列表视图中,并且在列表视图中保存选定的项目视图。

我该怎么做呢。 请推荐我。

时间: 原作者:

下面是实际工作的示例代码。 这可以帮助你解决你的问题。 唯一的变化是每个项目中图像大小的大小可能不同。 希望这将有帮助:

HomeActivity.java


 public class MainActivity extends AppCompatActivity {

 private static final int LIST_SIZE = 10;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 ((ListView) findViewById(R.id.list_view)).setAdapter(new SelectableItemsListAdapter(this, LIST_SIZE));
 }

 private class SelectableItemsListAdapter extends ArrayAdapter<Object> {

 private int mSize;
 private boolean []mSelectionArray;

 public SelectableItemsListAdapter(Context context, int size) {
 super(context, R.layout.list_item);
 mSize = size;
 int selectableItems = mSize * 4;
 mSelectionArray = new boolean[selectableItems];
 for(int i = 0 ; i <selectableItems ; i++){
 mSelectionArray[i] = false;
 }
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
 if(convertView == null){
 convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
 }

 int actualPosition = position * 4;
 View textView = convertView.findViewById(R.id.text_1);
 textView.setTag(actualPosition);
 textView.setOnClickListener(onClickListener);
 textView.setSelected(mSelectionArray[actualPosition]);

 actualPosition++;
 textView = convertView.findViewById(R.id.text_2);
 textView.setTag(actualPosition);
 textView.setOnClickListener(onClickListener);
 textView.setSelected(mSelectionArray[actualPosition]);

 actualPosition++;
 textView = convertView.findViewById(R.id.text_3);
 textView.setTag(actualPosition);
 textView.setOnClickListener(onClickListener);
 textView.setSelected(mSelectionArray[actualPosition]);

 actualPosition++;
 textView = convertView.findViewById(R.id.text_4);
 textView.setTag(actualPosition);
 textView.setOnClickListener(onClickListener);
 textView.setSelected(mSelectionArray[actualPosition]);

 return convertView;
 }

 @Override
 public int getCount() {
 return mSize;
 }

 private View.OnClickListener onClickListener = new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 int actualPosition = (int) v.getTag();
 mSelectionArray[actualPosition] =!v.isSelected();
 v.setSelected(mSelectionArray[actualPosition]);
 }
 };

 }

}

list_item.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="150dp"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:orientation="horizontal"
android:background="@android:color/white"
android:layout_margin="10dp">

 <LinearLayout
 android:layout_width="0dp"
 android:layout_height="match_parent"
 android:layout_weight="1"
 android:orientation="vertical">

 <TextView android:id="@+id/text_1"
 android:text="Text 1"
 android:layout_width="match_parent"
 android:layout_height="0dp"
 android:layout_weight="1"
 android:textColor="@android:color/black"
 android:background="@drawable/selectable_item"
 android:gravity="center"/>

 <TextView android:id="@+id/text_2"
 android:text="Text 2"
 android:layout_width="match_parent"
 android:layout_height="0dp"
 android:layout_weight="1"
 android:textColor="@android:color/black"
 android:background="@drawable/selectable_item"
 android:gravity="center"/>

 </LinearLayout>

 <LinearLayout
 android:layout_width="0dp"
 android:layout_height="match_parent"
 android:layout_weight="1"
 android:orientation="vertical">

 <TextView android:id="@+id/text_3"
 android:text="Text 3"
 android:layout_width="match_parent"
 android:layout_height="0dp"
 android:layout_weight="1"
 android:textColor="@android:color/black"
 android:background="@drawable/selectable_item"
 android:gravity="center"/>

 <TextView android:id="@+id/text_4"
 android:text="Text 4"
 android:layout_width="match_parent"
 android:layout_height="0dp"
 android:layout_weight="1"
 android:textColor="@android:color/black"
 android:background="@drawable/selectable_item"
 android:gravity="center"/>

 </LinearLayout>

</LinearLayout>

activity_main.xml


<ListView xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/list_view"
 android:layout_width="match_parent"
 android:layout_height="match_parent"/>

selectable_item.xml


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_selected="false">
 <color android:color="@android:color/transparent"/>
 </item>
 <item android:state_selected="true">
 <color android:color="@android:color/darker_gray"/>
 </item>
</selector>

...