如何从ArrayAdapter中删除项目?

时间:2017-12-19 11:48:10

标签: android listview android-arrayadapter

在我的应用程序中,我应该使用{ "cars": [{ "make": "make" }] } ListView来显示一些列表。 (我不应该使用ArrayAdapter所以不推荐给我使用它。)

我希望当计时器收到0时删除此项

RecyclerView

我将此代码编写为删除:

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

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

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

2 个答案:

答案 0 :(得分:3)

我认为你可以使用它:

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

答案 1 :(得分:0)

您不清楚调用哪种remove方法。你派生的BaseAdapter没有定义任何。 ArrayAdapter确实定义了要删除模型对象的remove方法,而不是索引。传递位置(即整数)时,Java会将其转换为Java Integer,因此编译但不能按预期工作。

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

相关问题