【问题标题】:Android RecyclerView array list change dynamicallyAndroid RecyclerView 数组列表动态变化
【发布时间】:2016-06-24 11:24:44
【问题描述】:

我在我的项目中使用RecyclerView,但在应用程序运行时自动更改RecyclerView 项目时遇到问题。

这是我的ArrayList,当应用程序启动时RecylcerView 显示mResIds

List<StickerView> mStickers = new ArrayList<>();
int[] mResIds = new int[]{R.mipmap.ic_sticker_01, R.mipmap.ic_sticker_02} 
int[] mLocIds = new int[]{R.mipmap.ic_sticker_03, R.mipmap.ic_sticker_04}

但是当我使用mLocIds 动态按下图像按钮时,我想更改这些项目。

这是我的另一个RecyclerView 代码:

private void initEvent() {
    mGalleryAdapter.setOnItemClickListener(new GalleryAdapter.OnRecyclerViewItemClickListener() {
        @Override
        public void onItemClick(View view, int resId) {
            addStickerItem(resId);
        }
    });
 }

添加Sticker

 private void addStickerItem(int resId) {
    resetStickersFocus();
    StickerView stickerView = new StickerView(this);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(

            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT);
    params.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.image);
    params.addRule(RelativeLayout.ALIGN_TOP, R.id.image);
    ((ViewGroup) mImageView.getParent()).addView(stickerView, params);

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId);
    stickerView.setWaterMark(bitmap);
    mStickers.add(stickerView);

    stickerView.setOnStickerDeleteListener(new StickerView.OnStickerDeleteListener() {
        @Override
        public void onDelete(StickerView stickerView) {
            if (mStickers.contains(stickerView))
                mStickers.remove(stickerView);
        }
    });

}

重置焦点项目:

private void resetStickersFocus() {
    for (StickerView stickerView : mStickers) {
        stickerView.setFocusable(false);
    }
}

其他用途:

private void initView() {
    mStatusBarHeight = getStatusBarHeight();
    mToolBarHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics());
    mToolbar = (Toolbar) findViewById(R.id.toolbar);
    setUpToolbar();
    mImageView = (ImageView) findViewById(R.id.image);
    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);

    mEffectImg = (ImageView) findViewById(R.id.effect_image);

    mGalleryAdapter = new GalleryAdapter(mResIds);


    LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);


    mRecyclerView.setLayoutManager(layoutManager);
    mRecyclerView.setAdapter(mGalleryAdapter);
}

这是我的onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pht);
    initView();
    initEvent();
    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    mImageView = (ImageView) findViewById(R.id.effect_image);
    btnFab = (FloatingActionButton) findViewById(R.id.btnFloatingAction);
}

所以基本上当我单击btnFab 按钮并调用onClick 时,我想将我的RecylerView 项目mResIds 更改为mLocIds

【问题讨论】:

    标签: android arraylist android-recyclerview


    【解决方案1】:

    这很容易做到。

    向您的 GalleryAdapter 类添加一个 setter 方法,该方法会覆盖 Adapter 内的 resIds 数组,然后在此方法内调用 notifyDataSetChanged()

    这可能看起来像这样:

    public class GalleryAdapter extends RecyclerView.Adapter {
    
        // Other methods left out for brevity.
    
        public void setData(int[] mLocIds) {
            this.mResIds = mLocIds;
            notifyDataSetChanged();
        }
    }
    

    现在需要从您的 FAB 的 onClickListener 中调用 GalleryAdapter#setData

    【讨论】:

    • 它非常完美。非常感谢:)
    • @canberkcakmak 随时:-)
    猜你喜欢
    • 2018-02-13
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多