如何将删除按钮(x)附加到动态创建的ListView的每个成员上?

问题描述 投票:0回答:1

我有一个动态创建的列表。它的片段布局如下:

<ListView
android:id="@+id/colorsList"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

当我向列表视图添加一行时,我希望在行的末尾出现一个“ X”标记,以便当用户单击“ X”时,该行将被删除。

不确定,如果它相关,但是我向列表视图添加和删除行的方式如下。

向listView添加一行的逻辑:

@BindView(R.id.understood_languages_list)
View mColorsList;

*********
*********

ListView listFavoriteColors;
listFavoriteColors = (ListView) mColorsList;
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, getColorsList());
listFavoriteColors.setAdapter(arrayAdapter);

用于从ListView中删除行的逻辑。

listFavoriteColors.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        initializeView();
        arrayAdapter.remove(((TextView)view).getText().toString());
    }
});

非常感谢您提供有关如何实现此目标的有用建议。

java android-layout listview android-listview
1个回答
0
投票
具有自定义布局的用户自定义适配器,用于将删除按钮附加到列表视图中的每个项目

尝试此代码:

CustomAdapter

public class ListAdapter extends ArrayAdapter<String> { private int resourceLayout; private Context mContext; ListInterFace interface; public ListAdapter(Context context, int resource, List<String> items,ListInterFace interface) { super(context, resource, items); this.resourceLayout = resource; this.mContext = context; this.interface=interface; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi; vi = LayoutInflater.from(mContext); v = vi.inflate(resourceLayout, null); } String value= getItem(position); if (value!= null) { TextView tt1 = (TextView) v.findViewById(R.id.dummytext); Button cancel_click=v.findViewById(R.id.cancel_click); if (tt1 != null) { tt1.setText(value); } //remove item on button click cancel_click.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ interface.removeItem(position); } }) } return v; }
}

R.layout.itemlistrow定义ListView的行。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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="wrap_content" tools:context=".MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/dummytext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Dummy" android:textColor="@android:color/black" android:textSize="18sp" android:padding="5dp"/> <ImageView android:id="@+id/cancel_click" android:layout_width="20dp" android:layout_height="20dp" android:src="@mipmap/cancel" android:layout_alignParentRight="true" android:layout_margin="5dp"/> </RelativeLayout> </LinearLayout>

在MainActivity中像这样定义ListView,

ListView yourListView = (ListView) findViewById(R.id.itemListView); // get data from the table by the ListAdapter ListAdapter customAdapter = new ListAdapter(this, R.layout.itemlistrow, myList, new ListInterFace () { @Override public void removeItem( int position) { myList.remove(position); customAdapter .notifyDataSetChanged(); }); yourListView .setAdapter(customAdapter);

InterFace

public interface ListInterFace { void removeItem(int position); }
尝试单击此链接可在单击按钮时从列表视图中删除项目Remove Item From List View On Button Click 
© www.soinside.com 2019 - 2024. All rights reserved.