Android Удаление нескольких элементов ListView при щелчке по таймеру - PullRequest
0 голосов
/ 09 января 2019

У меня есть ListView, который заполняется элементами из базы данных SQLite. Каждый элемент имеет свое значение / целое число. Например, элемент 1 может иметь значение 50, тогда как элемент 2 может иметь значение 80. При щелчке элемента появляется AlertDialog. Пользователь вводит значение в EditText AlertDialog, и это значение сравнивается с собственным значением элемента. Если пользовательское значение больше, чем значение элемента, удаление займет 5 секунд. И если пользовательское значение меньше значения элемента, это займет меньше времени и так далее.

Это нормально и работает, однако проблема в том, что удаляются несколько элементов. Какой элемент будет удален первым, будет единственным элементом, который будет удален, а остальные нет.

Так как же можно удалить несколько элементов ListView одновременно с помощью handler.postDelayed()?

SellFragment.java:

public class SellFragment extends Fragment {

final String[] from = new String[]{ItemsDatabaseHelper._ID,
        ItemsDatabaseHelper.ITEM,
        ItemsDatabaseHelper.PRICE};
final int[] to = new int[]{R.id.id, R.id.tvListName, R.id.tvListPrice};

DBManager dbManager;
ListView lvItems;
TextView tvStatus;
private Cursor mCursor;
private SimpleCursorAdapter adapter;
private long _id;

public SellFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fragment_sell, container, false);

    dbManager = new DBManager(getActivity());
    dbManager.open();
    Cursor cursor = dbManager.fetch();

    lvItems = view.findViewById(R.id.list_view);
    lvItems.setEmptyView(view.findViewById(R.id.empty));

    adapter = new SimpleCursorAdapter(getActivity(), R.layout.custom_listview_sell, cursor, from, to, 0);

    lvItems.setAdapter(adapter);

    adapter.notifyDataSetChanged();

    lvItems.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, final int position, final long viewId) {

            final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            LayoutInflater inflater = getActivity().getLayoutInflater();
            final View dialogView = inflater.inflate(R.layout.modify_item, null);
            builder.setView(dialogView);
            builder.setCancelable(true);

            final AlertDialog dialog = builder.create();
            dialog.show();

            TextView titleTextView = lvItems.getChildAt(position).findViewById(R.id.tvListName);
            TextView priceTextView = lvItems.getChildAt(position).findViewById(R.id.tvListPrice);
            tvStatus = lvItems.getChildAt(position).findViewById(R.id.tvStatus);

            final String nameID = titleTextView.getText().toString();
            final String price = priceTextView.getText().toString();

            final int priceID = Integer.valueOf(price);

            final TextView idTextView = lvItems.getChildAt(position).findViewById(R.id.id);
            String id = idTextView.getText().toString();
            _id = Long.parseLong(id);

            TextView tv_name = dialogView.findViewById(R.id.name);
            TextView tv_price = dialogView.findViewById(R.id.price);
            final EditText etAskingPrice = dialogView.findViewById(R.id.etAskingPrice);
            Button btnSellItem = dialogView.findViewById(R.id.btnSellItem);

            tv_name.setText("Item: " + nameID);
            tv_price.setText("Original Price: " + priceID);

            btnSellItem.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    tvStatus.setText(R.string.string_public);
                    tvStatus.setTextColor(getResources().getColor(R.color.colorTextGreen));

                    String value = etAskingPrice.getText().toString();

                    final int valueID = Integer.valueOf(value);

                    if (valueID > priceID) {

                        final Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {

                                deleteRowItem(_id);

                                mCursor = dbManager.fetch();
                                adapter.swapCursor(mCursor);

                                int profit = valueID - priceID;

                                Toast.makeText(getContext(), "Your " + nameID + " has been sold for $" + valueID + "\n" + "You made a profit of $" + profit, Toast.LENGTH_LONG).show();

                            }
                        }, 5000);
                    } else if (valueID < priceID) {

                        final Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {

                                deleteRowItem(_id);

                                mCursor = dbManager.fetch();
                                adapter.swapCursor(mCursor);

                                int loss = priceID - valueID;

                                Toast.makeText(getContext(), "Your " + nameID + " has been sold for $" + valueID + "\n" + "You made a loss of $" + loss, Toast.LENGTH_LONG).show();
                            }
                        }, 1000);

                    } else if (valueID == priceID) {


                        final Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {

                                deleteRowItem(_id);

                                mCursor = dbManager.fetch();
                                adapter.swapCursor(mCursor);

                                Toast.makeText(getContext(), "Your " + nameID + " has been sold for $" + valueID, Toast.LENGTH_SHORT).show();
                            }
                        }, 2500);
                    }

                    dialog.dismiss();

                }


            });

        }

    });

    return view;

}

public void deleteRowItem(long index) {
    this.dbManager.delete(index);
}}

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...