如何在recyclerView适配器中只运行一次代码?

gdgdg

在我的应用程序要使用RecyclerView,为此我设定多个布局RecyclerView
我用以下代码片段中的按钮更改了布局:

public class AuctionCurrentFragment extends BaseFragment {
    @BindView(R.id.recyclerList)
    RecyclerView recyclerList;
    private ImageView list_item;
    private ArrayList countries = new ArrayList<>();
    private RecyclerView.Adapter adapter;
    private Context context;
    private LinearLayoutManager layoutManager;
    private boolean clickFlag = false;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        super.onCreateView(inflater, container, savedInstanceState);
        View v = inflater.inflate(R.layout.fragment_auction_current_tab, null);

        ButterKnife.bind(this, v);
        context = getActivity();
        list_item = getActivity().findViewById(R.id.list_item);
        recyclerList.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(getContext());
        recyclerList.setLayoutManager(layoutManager);
        adapter = new AuctionCurrentRecyclerAdapter(context, countries, 1);

        initViews();

        list_item.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (clickFlag) {
                    adapter = new AuctionCurrentRecyclerAdapter(context, countries, 1);
                    recyclerList.setAdapter(adapter);
                    clickFlag = false;
                } else {
                    adapter = new AuctionCurrentRecyclerAdapter(context, countries, 2);
                    recyclerList.setAdapter(adapter);
                    clickFlag = true;
                }
            }
        });

        return v;
    }

    private void initViews() {

        for (int i = 0; i <= 10; i++) {
            countries.add("Title " + i);
        }
        recyclerList.setAdapter(adapter);
    }
}

在其中一种布局中,我使用progressBarshow count downer,但是当切换layouts(使用片段中的带有按钮的)显示此布局集时,请再次启动该count downer!
但是我想当开关布局不再重新开始时,继续降低计数。

适配器代码:

public class AuctionCurrentRecyclerAdapter extends RecyclerView.Adapter {
    private ArrayList<String> countries;
    private CountDownTimer countDownTimer;
    boolean isRunning = false;
    long timeInMillis;
    private int timeToEnd;
    private View view;
    private int itemLayout = 0;
    private LayoutInflater mInflater;
    private Context context;

    public AuctionCurrentRecyclerAdapter(Context context, ArrayList<String> countries, int itemLayout) {
        this.context = context;
        this.countries = countries;
        this.itemLayout = itemLayout;
        mInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        switch (itemLayout) {
            case 1:
                view = mInflater.inflate(R.layout.list_item_auction_large_new, viewGroup, false);
                return new LargeViewHolder(view);
            case 2:
                view = mInflater.inflate(R.layout.list_item_auction_normal, viewGroup, false);
                return new NormalViewHolder(view);
            default:
                return null;
        }
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int i) {
        switch (itemLayout) {
            case 1:
                ((LargeViewHolder) viewHolder).tv_country.setText(countries.get(i));
                break;
            case 2:
                ((NormalViewHolder) viewHolder).tv_country.setText(countries.get(i));
                break;
        }
    }

    @Override
    public int getItemViewType(int position) {
        if (itemLayout == 1) {
            return 1;
        } else {
            return 2;
        }
    }

    @Override
    public int getItemCount() {
        return countries.size();
    }

    public class LargeViewHolder extends RecyclerView.ViewHolder {
        private TextView tv_country, progressTxt;
        private ProgressBar progressBar;

        public LargeViewHolder(View view) {
            super(view);

            tv_country = (TextView) view.findViewById(R.id.text_view_16962);
            progressTxt = (TextView) view.findViewById(R.id.progressTxt);
            progressBar = view.findViewById(R.id.progress);

            timeToEnd = new Random().nextInt(100);
            long timeInput = timeToEnd * 1000;
            timeInMillis = timeInput;
            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();
        }
    }

    public class NormalViewHolder extends RecyclerView.ViewHolder {
        private TextView tv_country;

        public NormalViewHolder(View view) {
            super(view);

            tv_country = (TextView) view.findViewById(R.id.text_view_16962);
        }
    }
}

我该怎么办?

但是我想当开关布局不再重新开始时,继续降低计数。

Sharath库马尔

每次单击列表视图时都在创建适配器。而是在适配器内部创建一个方法来设置项目布局

public void setItemLayout(int itemLayout){
    this.itemLayout = itemLayout;
    notifyDataSetChanged();
}

在您的onclick方法中,调用setItemLayout方法。

if(adapter==null){
    adapter = new AuctionCurrentRecyclerAdapter(context, countries, 1);
    recyclerList.setAdapter(adapter);
}
if (clickFlag) {
    adapter.setItemLayout(1);
    clickFlag = false;
} else {
    adapter.setItemLayout(2);
    clickFlag = true;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android的数据绑定:缺少return语句生成的代码中调用自定义不止一次地结合适配器时

如何在RecyclerView适配器中更改所选CardView的背景

如何在适配器类之外更新RecyclerView适配器

如何在Recyclerview适配器中扩展活动的上下文

如何在recyclerView的适配器中调用scrollToPosition(position)?

如何从Android中的RecyclerView适配器获取物品

如何只快速运行一次代码?

如何在片段中调用RecyclerView适配器的方法

尽管获取了正确的数据,为什么RecyclerView适配器仍未正确更新(仅第一次)?

如何从片段中的RecyclerView适配器启动活动

如何在适配器类中维护recyclerview项目的可见性

如何在同一recyclerview的适配器类中更新recyclerview?

如何在单个recyclerView中设置两个不同的适配器?

如何在Firebase回收器适配器中实现recyclerview ItemClickListener()?

如何从Android Kotlin中的RecyclerView适配器获取arraylist

只运行一次代码

如何在RecyclerView适配器的onBindViewHolder中声明overridePendingTransition?

如何在其适配器的onBindViewHolder中更新recyclerView?

如何在recycleview适配器中设置布局可见性,我的适配器代码是

在 Uwp 中只运行一次代码

如何在使用光标适配器的 RecyclerView 中制作多张卡片?

每 1 秒刷新一次 RecyclerView 适配器

如何在 OnSuccessListener 中的 recyclerview 适配器中传递侦听器

如何在 RecyclerView 适配器中显示材质对话框?

如何在 Android 中将 RecyclerView 用于另一个 RecyclerView 的适配器?

如何在android java中的数据绑定recyclerview适配器中创建2列

如何在 recyclerview 适配器中与 Viewmodel 交互?

如何在 RecyclerView 适配器中使用 Snackbar

如何在 RecyclerView 适配器中获取 SharedPreferences 浮点值?