android - 如何在android中长按自定义 ListView 删除项目?

标签 android listview onlongclicklistener

我有一个带有自定义基本适配器的 ListView ,它可以验证 ListView 中的某些项目。我想要的是,当我长按 ListView 的项目时,应该打开一个对话框,说明"is"或“否”,当我点击"is"时,它应该从适配器中删除该项目。我该怎么做。

这是适配器的代码

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;


}
}

最佳答案

有两种方法可以通过长按删除项目。

1 来自类(class)

listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                return false;
            }
        });

2 来自适配器

viewHolder.m_getBtn.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    return false;
                }
            });

关于android - 如何在android中长按自定义 ListView 删除项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41477947/

相关文章:

java - Android TextView 和 ListView 中可点击的按钮

安卓长按tab

android - FirebaseAnalytics.getInstance 显示警告但编译成功

android - 如何获取 SharedPreferences 数据大小,可能吗?

c# - 在两个 ListView 中只选择一个项目

android - 列表项长按转场

android - OnClickListener 在 Android 中被调用两次

android - Datepicker 可能有错误的样式

java - AES 在 android 中使用 Base64 key 加密

android - 类似于 Google Catalogs 的水平 ListView