我有一个简单的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();
}
});
答案 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);
}
});
}
});
}