我有一个带有自定义数组适配器的列表视图。我想在点击删除按钮时删除项目。但是我无法修复它。当我点击删除按钮时,甚至我的应用程序都会死亡。我不知道。我的代码如下 -
代码: -
package com.abc_fragment;
import java.util.ArrayList;
import com.abc.R;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
public class Fragment_ListviewContactAdapter extends BaseAdapter
{
private static ArrayList listDetail;
private LayoutInflater mInflater;
Context context;
public Fragment_ListviewContactAdapter(Context Fragment, ArrayList results)
{
listDetail = results;
mInflater = LayoutInflater.from(Fragment);
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return listDetail.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return listDetail.get(arg0);
}
@Override
public long getItemId(int arg0)
{
// TODO Auto-generated method stub
return arg0;
}
@SuppressWarnings("unused")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView == null)
{
convertView = mInflater.inflate(R.layout.fragment_listitem, null);
holder = new ViewHolder(); //Atomholderpayment
// holder.ListviewDashBoard = listDetail.get(position);
holder.orderno = (TextView) convertView.findViewById(R.id.OrderNo_text);
holder.dispatchTo = (TextView) convertView.findViewById(R.id.dispatchTo_text);
holder.dealerN = (TextView) convertView.findViewById(R.id.dealerName_text);
holder.orderT = (TextView) convertView.findViewById(R.id.order_text);
holder.amountT = (TextView) convertView.findViewById(R.id.Amount_text);
holder.removeButton = (Button)convertView.findViewById(R.id.button_delete);
//holder.removeButton.setTag(holder.ListviewDashBoard);
//holder.removeButton.setOnClickListener((OnClickListener) this);
//convertView.setOnClickListener(new OnItemClickListener(position));
convertView.setTag(holder);
/* holder.removeButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
int pos = (Integer) v.getTag();
listDetail.remove(pos);
Fragment_ListviewContactAdapter.this.notifyDataSetChanged();
}
// TODO Auto-generated method stub
});*/
} else
{
holder = (ViewHolder) convertView.getTag();
}
Fragment_listViewDashboard ListviewDashBoard =listDetail.get(position);
holder.orderno.setText(listDetail.get(position).getOrderno());
holder.dispatchTo.setText(listDetail.get(position).getDispatchTo());
holder.dealerN.setText(listDetail.get(position).getDealerN());
holder.orderT.setText(listDetail.get(position).getOrderT());
holder.amountT.setText(listDetail.get(position).getAmountT());
holder.removeButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
Log.i("Delete Button Clicked", "*************************************************");
Toast.makeText(context, "Delete button Clicked",
Toast.LENGTH_LONG).show();
}
});
return convertView;
}
static class ViewHolder
{
TextView orderno, dispatchTo, dealerN,orderT, amountT ;
Button removeButton;
}
}
答案 0 :(得分:4)
请尝试这种方式,希望这有助于您解决问题。
首先在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();
}
});
答案 1 :(得分:3)
当你点击代码下面的删除按钮工具时:
YOURLISTVIEW.removeViewAt(position);
YOURARRAY.remove(position);
YOURADAPTER.notifyDataSetChanged();
答案 2 :(得分:2)
首先单击删除按钮,您必须从arraylist中删除位置,然后通知您的适配器,如:
holder.removeButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
_arrayList.remove(position);
notifyDataSetChanged();
}
});
或者您可以创建一种方法将适配器重置到列表中,如:
public void _resetAdapter(ArrayList<String> _list){
// Set your adapter here and pass _list in your adapter
}
并将此方法称为:
holder.removeButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
_arrayList.remove(position);
_resetAdapter(_arrayList);
}
});
答案 3 :(得分:0)
当您点击删除按钮....您应该执行这些操作 1.从数组列表或数组或数据库中删除项目.... 2.然后再次显示列表,刷新布局屏幕....(将所有显示列表代码放入方法中,然后再次调用)...
希望这能帮到你......