【问题标题】:How to remove item from ArrayAdapter?如何从 ArrayAdapter 中删除项目?
【发布时间】:2017-12-19 11:48:09
【问题描述】:

在我的应用程序中,我应该使用ListView 和ArrayAdapter 来显示一些列表。 (我不应该使用 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();
        }

但不工作我也没有删除任何项目!

如何从适配器中删除项目?

【问题讨论】:

  • remove() 方法在哪里?
  • @MohdSaquib,我想从适配器中删除而不是从活动/片段中删除。你能帮帮我吗?
  • @MaheshVayak,remove() 有 arrayAdapter 方法
  • 然后使用ArrayAdapter#remove方法

标签: android listview android-arrayadapter


【解决方案1】:

我认为你可以使用这个:

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;
    }
}}

【讨论】:

    【解决方案2】:

    不清楚您调用的是哪个remove 方法。 BaseAdapter 你从没有定义任何东西。 ArrayAdapter 确实定义了 remove 方法,该方法需要删除模型对象,而不是索引。当您传递位置(即整数)时,Java 会将其转换为 Java Integer,以便编译但无法按预期工作。

    您可以先获取该值,然后再尝试删除。如果我正确理解您的代码中的所有内容,很可能是remove(datas.get(position))。

    【讨论】:

    • BaseAdapter 扩展自 ArrayAdapter。我的 baseAdapter 代码有:public class BaseAdapter extends ArrayAdapter。你能帮帮我吗?
    猜你喜欢
    • 2015-06-02
    • 2011-06-09
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2021-10-19
    • 2013-08-28
    相关资源
    最近更新 更多