如何在android中长时间单击时从自定义列表视图中删除项目?

如何在android中长时间单击时从自定义列表视图中删除项目?,android,listview,onlongclicklistener,Android,Listview,Onlongclicklistener,我有一个带有自定义基本适配器的listview,用于验证listview中的某些项。我想要的是,当我长时间点击ListView项时,会打开一个对话框,说明“是”或“否”,当我点击“是”时,它会从适配器中删除该项。我该怎么做呢 下面是适配器的代码 private static final String TAG = CDealAppListingAdapter.class.getSimpleName(); private static final String DEAL_CODE = "DealCo

我有一个带有自定义基本适配器的listview,用于验证listview中的某些项。我想要的是,当我长时间点击ListView项时,会打开一个对话框,说明“是”或“否”,当我点击“是”时,它会从适配器中删除该项。我该怎么做呢

下面是适配器的代码

private static final String TAG = CDealAppListingAdapter.class.getSimpleName();
private static final String DEAL_CODE = "DealCode";
private static final String HEADER_TEXT = "headerText";
private static final String LOGO_PATH = "logoPath";
private final Context m_Context;// declaring context variable
private final ArrayList<CDealAppDatastorage> s_oDataset;// declaring array list ariable

public CDealAppListingAdapter(Context m_Context, ArrayList<CDealAppDatastorage> mDataList) {
    this.m_Context = m_Context;
    s_oDataset = mDataList;
}

@Override
public int getCount() {// get total arraylist size
    return s_oDataset.size();
}

@Override
public Object getItem(int position) {// get item position in array list
    return s_oDataset.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@SuppressWarnings("deprecation")
@SuppressLint({"SetTextI18n", "InflateParams"})
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final ViewHolder viewHolder;
    if (convertView == null) {
        viewHolder = new ViewHolder();
        convertView = inflater.inflate(R.layout.deallisting_card_view, null);
        viewHolder.m_Header = (TextView) convertView.findViewById(R.id.headingText);
        viewHolder.m_DummyText = (TextView) convertView.findViewById(R.id.subHeadingText);
        viewHolder.m_logoImage = (ImageView) convertView.findViewById(R.id.appImage);
        viewHolder.m_getBtn = (Button) convertView.findViewById(R.id.getDealBtn);
        viewHolder.mProgress = (ProgressBar) convertView.findViewById(R.id.progressBar3);
        convertView.setTag(viewHolder);

    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.m_getBtn.setOnClickListener(new View.OnClickListener() {// onclick getDeal Btn
        @Override
        public void onClick(View v) {//send to deal detail page onclick getDeal Btn
            if (NetworkUtil.isConnected(m_Context)) {
                Intent i = new Intent(v.getContext(), CDealAppListingDetails.class);
                i.putExtra(DEAL_CODE, s_oDataset.get(position).getM_szsubHeaderText());// get deal code from deal data storage
                i.putExtra(HEADER_TEXT, s_oDataset.get(position).getM_szHeaderText());// get deal name from deal dta storage
                i.putExtra(LOGO_PATH, s_oDataset.get(position).getM_szLogoPath());
                v.getContext().startActivity(i);
            } else {
                /*here I am getting error*/
                CSnackBar.showSnackBarError(v, m_Context.getString(R.string.no_internet_connection), v.getContext());
            }

        }
    });

    CDealAppDatastorage m = s_oDataset.get(position);
    viewHolder.m_Header.setText(m.getM_szHeaderText());
    viewHolder.m_DummyText.setText(m.getM_szDetails());
    viewHolder.m_getBtn.setText("GET " + m.getM_szDealValue() + " POINTS");// set deal button text
    Picasso.with(m_Context).load(m.getM_szLogoPath()).into(viewHolder.m_logoImage, new Callback() {
        @Override
        public void onSuccess() {
            Log.e(TAG, "OnSuccess Called::");
            viewHolder.mProgress.setVisibility(View.INVISIBLE);
        }

        @Override
        public void onError() {
            Log.e(TAG, "OnError Called::");
        }
    });

    return convertView;
}

private class ViewHolder {
    public TextView m_Header, m_Subheader, m_DummyText;
    public ImageView m_logoImage;
    public Button m_getBtn;
    public ProgressBar mProgress;


}
}
private static final String TAG=cdealapplistinadapter.class.getSimpleName();
私有静态最终字符串DEAL\u CODE=“DealCode”;
私有静态最终字符串头\u TEXT=“headerText”;
私有静态最终字符串LOGO_PATH=“logoPath”;
私有最终上下文m_Context;//声明上下文变量
私人最终阵列列表s_oDataset;//声明数组列表变量
公共CDealAppListingAdapter(上下文m_上下文,ArrayList mDataList){
this.m_Context=m_Context;
s_oDataset=mDataList;
}
@凌驾
public int getCount(){//get总数组列表大小
返回s_oDataset.size();
}
@凌驾
公共对象getItem(int位置){//get项目在数组列表中的位置
返回s_oDataset.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@抑制警告(“弃用”)
@SuppressLint({“SetTextI18n”,“InflateParams”})
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)parent.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
最终持票人;
if(convertView==null){
viewHolder=新的viewHolder();
convertView=充气机.充气(R.layout.deallisting\u card\u视图,空);
viewHolder.m_Header=(TextView)convertView.findViewById(R.id.headingText);
viewHolder.m_DummyText=(TextView)convertView.findViewById(R.id.subHeadingText);
viewHolder.m_logoImage=(ImageView)convertView.findviewbyd(R.id.appImage);
viewHolder.m_getBtn=(按钮)convertView.findViewById(R.id.getDealBtn);
viewHolder.mProgress=(ProgressBar)convertView.findViewById(R.id.progressBar3);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.m_getBtn.setOnClickListener(新视图.OnClickListener(){//onclick getDeal Btn
@凌驾
public void onClick(视图v){//send to deal详细信息页面onClick getDeal Btn
if(NetworkUtil.isConnected(m_上下文)){
Intent i=newintent(v.getContext(),CDealAppListingDetails.class);
i、 putExtra(交易代码,s_oDataset.get(position.getM_szsubHeaderText());//从交易数据存储中获取交易代码
i、 putExtra(HEADER_TEXT,s_oDataset.get(position.getM_szHeaderText());//从交易dta存储中获取交易名称
i、 putExtra(LOGO_PATH,s_oDataset.get(position.getM_szLogoPath());
v、 getContext().startActivity(i);
}否则{
/*这里我得到了一个错误*/
showSnackBarError(v,m_Context.getString(R.string.no_internet_connection),v.getContext());
}
}
});
CDealAppDatastorage m=s_oDataset.get(位置);
viewHolder.m_Header.setText(m.getM_szHeaderText());
viewHolder.m_DummyText.setText(m.getM_szDetails());
viewHolder.m_getBtn.setText(“GET”+m.getM_szDealValue()+“POINTS”);//设置交易按钮文本
Picasso.with(m_Context).load(m.getM_szLogoPath())到(viewHolder.m_logoImage,new Callback()中){
@凌驾
成功时的公共无效(){
Log.e(标记“OnSuccess Called::”);
viewHolder.mProgress.setVisibility(View.INVISIBLE);
}
@凌驾
公开无效{
Log.e(标记“OnError Called::”);
}
});
返回视图;
}
私有类视窗持有者{
公共文本查看m_标题、m_子标题、m_DummyText;
公共图像查看m_logoImage;
公共按钮m_getBtn;
公共进步;
}
}

下面的示例代码结构

listview.setOnItemLongClickListener(new OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                        int pos, long id) {
                    // TODO Auto-generated method stub

                    //show dialog asking user option to delete or not
                    //On OK click, dataset.remove(position);
                   //adapter.notifyDatasetChanged();

                    return true;
                }
            }); 
listview.setOnItemLongClickListener(新的OnItemLongClickListener(){
@凌驾
长单击(AdapterView arg0、视图arg1、,
内部位置,长id){
//TODO自动生成的方法存根
//显示询问用户是否删除选项的对话框
//单击确定,删除数据集(位置);
//adapter.notifyDatasetChanged();
返回true;
}
}); 

有两种方法可以在长按时删除项目

1班
从arraylist和referesh listview中删除所选项目

s_oDataset.remove(youritemPostion);  

notifyDataSetChanged();
单击
YES

lv.setOnItemLongClickListener(新的OnItemLongClickListener(){
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int pos, long id) {
            // TODO Auto-generated method stub
            //call Dialog builder class here.

        }
    }); 
@凌驾 长单击(AdapterView arg0、视图arg1、, 内部位置,长id){ //TODO自动生成的方法存根 //在这里调用对话框生成器类。 } });

首先在调用Dialogbuilder类的内部调用setOnItemLongClickListener,然后在该对话框生成器中使用.setPositiveButton或.setNegativeButton方法设置对话框上的按钮

在适配器类内部为convertview实现onitemlongclicklistener,并从数据集中的单击位置删除该项。调用后,通知刷新listview.code请………我必须在adpter类或Activity中的活动类中写入该代码确定我在类中有一个按钮单击事件我要发送服务器请求,并根据该事件更改按钮颜色。我该怎么做
s_oDataset.remove(youritemPostion);  

notifyDataSetChanged();
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int pos, long id) {
            // TODO Auto-generated method stub
            //call Dialog builder class here.

        }
    });