单击按钮删除ListView行项

时间:2014-12-05 05:40:33

标签: android listview selecteditem delete-row

我有一个简单的listview,每行都有一个删除按钮

现在,当我单击“删除”按钮时,应删除所选的列表视图行。

这是我的Listview:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="match_parent"
           android:layout_height="match_parent" >

 <ListView android:id="@+id/itemslistview"
           android:layout_height="match_parent"
           android:layout_width="match_parent"
           android:layout_marginTop="75dp"/>
</RelativeLayout>

ListViewRow:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="horizontal"
          android:layout_width="match_parent"
          android:layout_height="match_parent">

    <TextView
          android:id="@+id/textView"
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:layout_weight="2"
          android:padding="10dp"
          android:textSize="16sp"
          android:ems="10" 
          android:textColor="#800080" />
    <ImageView
           android:id="@+id/btndelete"
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content"
           android:layout_weight="1" 
           android:src="@drawable/delete"
           android:layout_toRightOf="@+id/textView"
           android:layout_marginTop="5dp"/>
</LinearLayout>

这就是我试图删除的方式:

lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                                                   int position, long id) {
        listrowposition= position;
        Button del =(Button)findViewById(R.id.btndelete);
        findViewById(R.id.deleteicon).setOnClickListener(
                                        new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                MyList.remove(listrowposition);
                adp.notifyDataSetChanged();
                Toast.makeText(getApplicationContext(),
                               "Deleted ListItem Number " + listrowposition,
                               Toast.LENGTH_LONG).show();
            }
        });
        Toast.makeText(getApplicationContext(),
                       "Click ListItem Number " + listrowposition,
                       Toast.LENGTH_LONG).show();

    }
});

5 个答案:

答案 0 :(得分:5)

在您的代码中尝试此操作:

lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
listrowposition= position;
Button del =(Button)view.findViewById(R.id.deleteicon);
del.setOnClickListener(
    new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            MyList.remove(listrowposition);
            adp.notifyDataSetChanged();
            Toast.makeText(getApplicationContext(),
                      "Deleted ListItem Number " + listrowposition, Toast.LENGTH_LONG)
                      .show();
        }
    });


Toast.makeText(getApplicationContext(), "Click ListItem Number " + listrowposition, Toast.LENGTH_LONG)
.show();

}
});

答案 1 :(得分:1)

您需要使用View参数中的onClick

Button del =(Button) view.findViewById(R.id.btndelete);

但要注意,findViewById被认为不是表现明智,因为它需要很长时间才能运作。最好使用holder pattern并在onClick内设置adapter

答案 2 :(得分:1)

请尝试这种方式,希望这有助于您解决问题。

首先在getView()参数中将位置定义为 final ,然后尝试使用从列表数据持有者 listDetail 中删除列表项删除方法并使用 notifyDataSetChanged 方法通知您的适配器,如:

holder.removeButton.setOnClickListener(new OnClickListener()
{ 
    @Override
    public void onClick(View v)
    {
      listDetail.remove(position);
      notifyDataSetChanged();
      Log.i("Delete Button Clicked",*************************************************");
      Toast.makeText(context, "Delete button Clicked",Toast.LENGTH_LONG).show();
    }
});

答案 3 :(得分:0)

首先获取Listview和Button的单击事件,需要将Button的Focusable()和FocusableInTouchMode()属性设置为FALSE。

现在,在自定义适配器的getView()方法中,您可以获得对列表中Button的引用。在你的按钮的setTag(位置)。

将onClickListener设置为此Button,当你获得onClick(View view)回调时,可以调用getTag()方法查看(它是列表项的位置)。

最后,使用该位置,您可以从列表中删除元素并调用适配器的notifyDataSetChanged()。

答案 4 :(得分:0)

使用简单动画删除。

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> parent, final View view,
          int position, long id) {
        final String item = (String) parent.getItemAtPosition(position);
        view.animate().setDuration(2000).alpha(0)
            .withEndAction(new Runnable() {
              @Override
              public void run() {
                list.remove(item);
                adapter.notifyDataSetChanged();
                view.setAlpha(1);
              }
            });
      }

    });
  }