【问题标题】:How can I delete my list row by clicking on button in each row of the LISTVIEW如何通过单击 LISTVIEW 每一行中的按钮来删除我的列表行
【发布时间】:2014-10-29 05:34:09
【问题描述】:

我有一个带有自定义数组适配器的列表视图。我想在单击删除按钮时删除该项目。但我无法修复它。当我点击删除按钮时,甚至我的应用程序也会死机。我没有任何想法。我的代码如下-

代码:-

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;


}

}

【问题讨论】:

  • 你在适配器中传递arraylist,所以当你点击listview时,从Arraylist中删除项目并更新适配器
  • 尝试调用listDetail.remove(position);并在调用 notifyDataSetChanged();
  • 有很多与滑动删除相关的示例项目
  • 谢谢@HareshChhelana,这对我很有帮助:)
  • @Khanna,很高兴为您提供帮助,如果对您有用,请您批准和投票。

标签: android user-interface android-fragments android-gui


【解决方案1】:

试试这个方法,希望能帮助你解决问题。

首先在 getView() 参数中将 position 定义为 final,然后尝试使用 从列表数据持有者 listDetail 中删除列表项remove 方法并使用 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();
    }
});

【讨论】:

    【解决方案2】:

    当你点击删除按钮时,实现以下代码:

    YOURLISTVIEW.removeViewAt(position);
    YOURARRAY.remove(position);
    YOURADAPTER.notifyDataSetChanged();
    

    【讨论】:

      【解决方案3】:

      删除按钮的 OnClick 首先,您必须从数组列表中删除位置,然后通知您的适配器,例如:

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

      【讨论】:

        【解决方案4】:

        当你点击删除按钮时......你应该执行这些操作 1. 从您的数组列表或数组或数据库中删除项目.... 2. 然后通过再次显示列表刷新布局屏幕......(将所有显示列表代码放在一个方法中,然后再次调用它)......

        希望对你有所帮助.....

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-03
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-24
          相关资源
          最近更新 更多