簡體   English   中英

如何使用對話框自定義ArrayAdapter時從ListView中刪除項目

[英]How to delete item from ListView while using Custom ArrayAdapter w/ Dialog

一些上下文:我有一個ListView的自定義ArrayAdapter,它具有3個參數Name,Edit Button,Delete Button。 我在ArrayAdapter中設置了onClicks ,以便能夠通過按下特定的編輯/刪除按鈕來檢測正在單擊的配置文件。 當用戶刪除配置文件時,我從SQLite DB刪除了配置文件,但是現在我遇到了嘗試用刪除的項目更新ArrayList並為ListView notifyDataSetChanged的問題。

問題1:我不知道是否應該在包含ListView和ArrayList的類中執行此操作,或者是否應該嘗試從onClicks中的ArrayAdapter進行更新。

問題2:無論哪種方法正確,當用戶在對話框中確認刪除后,如何正確地從ListView更新已刪除的項目。

在此處輸入圖片說明

當前的ArrayAdapter類

public class ListViewItemAdapter extends ArrayAdapter<ListViewItem>
{
    private Context mContext;
    private List<ListViewItem> list = new ArrayList<>();
    private DatabaseHelper databaseHelper;
    private String profileName;

    public ListViewItemAdapter(@NonNull Context context, ArrayList<ListViewItem> listItem) {
    super(context, 0 , listItem);
    mContext = context;
    list = listItem;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View listItem = convertView;
    if(listItem == null)
        listItem = LayoutInflater.from(mContext).inflate(R.layout.custom_listview,parent,false);

    final ListViewItem listViewItem = list.get(position);

    //Text View Profile
    final TextView name = (TextView) listItem.findViewById(R.id.textView_name);
    name.setText(listViewItem.getmName());
    profileName = listViewItem.getmName();

    //Edit Button Profile
    ImageButton image = listItem.findViewById(R.id.imageView_poster);
    image.setImageResource(listViewItem.getmImageDrawable());
    image.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            Toast.makeText(mContext,
                    "Edit Profile:" + listViewItem.getmProfile() + " Name:" + listViewItem.getmName(),
                    Toast.LENGTH_SHORT).show();
        }
    });


    //Delete Button Profile **Currently Testing**
    ImageButton image2 = listItem.findViewById(R.id.imageView_poster2);
    image2.setImageResource(listViewItem.getmImageDrawable2());
    image2.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            databaseHelper = new DatabaseHelper(getContext());

            Toast.makeText(mContext,
                    "Delete Profile:" + listViewItem.getmProfile() + " Name:" + listViewItem.getmName(),
                    Toast.LENGTH_SHORT).show();
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext(),R.style.AlertDialogTheme);

            builder.setTitle("Delete Profile?")
                    .setMessage("Are you sure you want to delete\n" + listViewItem.getmName())
                    .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            databaseHelper.deleteRowProfile(listViewItem.getmName());

                            //
                            //This is where I'm try to update the ListView
                            //

                        }
                    })
                    .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    })
                    .show();
        }
    });


    return listItem;
}
}

片段類中的函數,用於填充ListView onViewCreated

public void getProfileList()
{
    arrayList = new ArrayList<ListViewItemAdapter>();
    listViewItemAdapter = new ListViewItemAdapter(getContext(),arrayList);

    Cursor result = databaseHelper.getAllDataCarProfile();

    if(listViewItemAdapter != null){
        listViewItemAdapter.clear();
        listViewItemAdapter.notifyDataSetChanged();
    }

    if (result.getCount() != 0)
    {
        while (result.moveToNext())
        {
            arrayList.add(new ListViewItem("CarProfile",
                    result.getString(0),
                    R.drawable.ic_edit_gray_24dp,
                    R.drawable.ic_delete_grey_24dp));
        }
        listViewItemAdapter.notifyDataSetChanged();
    }

    listViewCarProfile.setAdapter(listViewItemAdapter);

}

您可以通過任何一種方式來執行此操作。 您可以在適配器類中創建一個函數並對其執行clickListener。

deleteItem.setOnClickListener(v -> {
            potsList.remove(getAdapterPosition());
            notifyDataSetChanged();
 }

或者在您的課堂上,當從清單中刪除物品時,不要忘記通知適配器。 一個適配器得到通知,它將反映在屏幕上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM