【问题标题】:How can I attach a delete button (x) to each member of a dynamically created ListView?如何将删除按钮 (x) 附加到动态创建的 ListView 的每个成员?
【发布时间】:2019-11-07 02:05:38
【问题描述】:

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

<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】:

    具有自定义布局的用户自定义适配器将删除按钮附加到列表视图中的每个项目

    试试这个代码:

    自定义适配器

    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);
    

    界面

    public interface ListInterFace  {
       void removeItem(int position);
    }
    

    尝试此链接以在单击按钮时从列表视图中删除项目 Remove Item From List View On Button Click

    【讨论】:

    • 非常感谢您的回复。会试一试。
    猜你喜欢
    • 2021-05-31
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多