android - 将 RecyclerView 显示到片段中
问题描述
我有方法:
private void initImageBitmaps() {
mImageUrls.add("imageUrl");
mNames.add("abcd");
initRecyclerView();
}
private void initRecyclerView() {
Log.d(TAG, "initRecyclerView: init recyclerview.");
RecyclerView recyclerView = findViewById(R.id.recyclerv_view);
RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, mNames, mImageUrls);
recyclerView.setAdapter(adapter);
//recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
}
将图像添加到我的回收站视图中。如果它在活动中,我会initImageBitmaps()
在 OnCreate 内部调用。不幸的是,我必须在片段中使用它,问题是:如何将这些方法实现到扩展片段的类?当然,所有内容都将显示在 RecyclerView 中,并在 xml 中带有 recycler_view id。
编辑:我的适配器:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
private static final String TAG = "RecyclerViewAdapter";
private ArrayList<String> mImageNames = new ArrayList<>();
private ArrayList<String> mImages = new ArrayList<>();
private Context mContext;
public RecyclerViewAdapter(WallpapersFragment context, ArrayList<String> imageNames, ArrayList<String> images ) {
mImageNames = imageNames;
mImages = images;
mContext = context;
//Rquired is android.content.context and found is WallpapersFragment from my project
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_listitem, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
Log.d(TAG, "onBindViewHolder: called.");
Glide.with(mContext)
.asBitmap()
.load(mImages.get(position))
.into(holder.image);
holder.imageName.setText(mImageNames.get(position));
holder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(mContext, GalleryActivity.class);
intent.putExtra("image_url", mImages.get(position));
intent.putExtra("image_name", mImageNames.get(position));
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mImageNames.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
ImageView image;
TextView imageName;
RelativeLayout parentLayout;
public ViewHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.image);
imageName = itemView.findViewById(R.id.image_name);
parentLayout = itemView.findViewById(R.id.parent_layout);
}
}
}
只有当我mContext = context;
在适配器中评论时它才会编译。然后错误是: java.lang.NullPointerException: You cannot start a load on a not yet attached View or a Fragment where getActivity() return null (通常在附加 Fragment 之前或 Fragment 之后调用 getActivity() 时发生被破坏)。
解决方案
initRecyclerView(view)
;
接着:
recyclerView = view.findViewById(R.id.recyclerv_view);
推荐阅读
- html5-video - 在 Ubuntu 上全新安装 RocketChat (1524) 时遇到的问题
- r - 如何将向量作为变量参数传递给 R 中的函数
- laravel - 当我登录到 Laravel Stack Channel 时,信息在哪里?
- pdf - PDF命名字典修改
- python - 为什么在 Python 3.6 中通过 TCP 套接字发送列表时我的输出会有所不同?
- gradle - Gradle 的简写形式 dependsOn, mustRunAfter
- javascript - 从html调用的用于图像旋转的slider.js同时旋转所有图像而不是旋转
- c++ - 无法遍历 std::map
- django - 具有相同两个类的多个多对多关系 - Django
- c++ - 指针数组交换,无需直接访问数组