簡體   English   中英

如何從ArrayAdapter中刪除項目?

[英]How to remove item from ArrayAdapter?

在我的應用程序中,我應該使用ListViewArrayAdapter來顯示一些列表。 (我不應該使用RecyclerView所以不建議我使用它)。

我希望當計時器收到0時刪除這個項目

public class AuctionTodayListAdapter extends BaseAdapter {

    private TextView proName, progressTxt, txtPercent, txtPrice2, txtStartPrice, txtPrice, progressFinishedTxt,
            text_view_169622, price, timeView, edtUserName, today_inputPriceTxt, today_basePriceTxt,
            txtDate, under10_priceTxt;
    private CustomBadge bidCount, offerCount;
    private ProgressBar progressBar;
    private ImageView GoodPic, userPic, User;
    private CountdownView countdownView;

    public AuctionTodayListAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull List<TodayGmodel> objects) {
        super(context, resource, objects);

    }

    @SuppressLint("SetTextI18n")
    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        final TodayGmodel model = (TodayGmodel) datas.get(position);

        View view;
        if (convertView != null)
            view = convertView;
        else
            view = View.inflate(context, layout, null);

        Constants.setFont(parent);
        df = new DecimalFormat(",###.##");
        Log.e("todayTimer", model.getCalculateEnd() + "");
        proName = (TextView) view.findViewById(R.id.text_view_16962);
        progressTxt = (TextView) view.findViewById(R.id.progressTxt);
        txtPercent = (TextView) view.findViewById(R.id.txtPercent);
        txtPrice2 = (TextView) view.findViewById(R.id.txtPrice2);
        txtPrice = (TextView) view.findViewById(R.id.txtPrice);
        text_view_169622 = (TextView) view.findViewById(R.id.text_view_169622);
        txtStartPrice = (TextView) view.findViewById(R.id.txtStartPrice);

        countdownView.setOnCountdownIntervalListener(1000, new CountdownView.OnCountdownIntervalListener() {
            @Override
            public void onInterval(CountdownView cv, long remainTime) {
                if (remainTime < 10000 && remainTime > 0) {
                    winnerLay.setVisibility(View.GONE);
                    listItem_winnerLay.setVisibility(View.GONE);
                    listItem_todayUpper10Lay.setVisibility(View.GONE);
                    listItem_todayPriceLay.setVisibility(View.VISIBLE);
                    listItem_under10Lay.setVisibility(View.VISIBLE);
                    under10_priceTxt.setText(df.format(model.getPrice()) + "Dollar");

                    progressBar.setMax((int) timeInMillis / 1000);
                    isRunning = true;

                    countDownTimer = new CountDownTimer(timeInMillis, 100) {
                        @Override
                        public void onTick(long millisUntilFinished) {
                            progressTxt.setText("" + String.valueOf(Math.round(millisUntilFinished * 0.001f)));
                            progressBar.setProgress(Math.round(millisUntilFinished * 0.001f));
                        }

                        @Override
                        public void onFinish() {

                        }
                    }.start();
                    countDownTimer.start();
                }
                if (remainTime < 0) {
                    startTimer();

                    remove(position);
                    notifyDataSetChanged();
                }
            }
        });

我寫這段代碼用於刪除:

        if (remainTime < 0) {
            startTimer();

            remove(position);
            notifyDataSetChanged();
        }

但沒有工作我沒有刪除任何項目!

如何從適配器中刪除項目?

我想你可以用這個:

if (remainTime < 0) {
        startTimer();
      // your list object
        datas.remove(position);
        notifyDataSetChanged();
    }

嘿,如果不工作,那么我已經為你創建了一個樣本。如果你可以共享你的xml文件或正確的代碼正常工作,那么我們可以很容易地幫助你,你可以像這樣使用。

public class MainActivity extends AppCompatActivity {
EditText textView;

  ArrayList<Integer> newArraylist;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    newArraylist = new ArrayList<>();
    newArraylist.add(R.mipmap.ic_launcher);
    newArraylist.add(R.mipmap.ic_launcher);
    newArraylist.add(R.mipmap.ic_launcher);
    newArraylist.add(R.mipmap.ic_launcher);
    newArraylist.add(R.mipmap.ic_launcher);
    newArraylist.add(R.mipmap.ic_launcher);
    newArraylist.add(R.mipmap.ic_launcher);
    newArraylist.add(R.mipmap.ic_launcher);

    GridView simpleGrid = (GridView) findViewById(R.id.simpleGridView);
    AuctionTodayListAdapter customAdapter = new AuctionTodayListAdapter(newArraylist);
    simpleGrid.setAdapter(customAdapter);
}


public class AuctionTodayListAdapter extends BaseAdapter {
    Context context;
    private TextView proName, progressTxt, txtPercent, txtPrice2, txtStartPrice, txtPrice, progressFinishedTxt,
            text_view_169622, price, timeView, edtUserName, today_inputPriceTxt, today_basePriceTxt,
            txtDate, under10_priceTxt;
    ArrayList<Integer> newString;

    public AuctionTodayListAdapter(ArrayList<Integer> objects) {
        newString = objects;
        context = MainActivity.this;
    }

    @Override
    public int getCount() {
        return newString.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater inflter = (LayoutInflater.from(getApplicationContext()));
        View view = inflter.inflate(R.layout.activity_grid, null);//set layout for displaying items
        ImageView icon = (ImageView) view.findViewById(R.id.icon);
        icon.setImageResource(newString.get(position));
        icon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                newString.remove(position);
                notifyDataSetChanged();
            }
        });

        return view;
    }
}}

目前尚不清楚您調用哪種remove方法。 您派生的BaseAdapter沒有定義任何。 ArrayAdapter確實定義了刪除模型對象的remove方法,而不是索引。 傳遞位置(即整數)時,Java會將其轉換為Java Integer,因此編譯但不能按預期工作。

您可以先獲取該值,然后嘗試刪除。 如果我在代碼中正確理解了所有內容,則很可能會remove(datas.get(position))

暫無
暫無

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

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