【问题标题】:Adapters not working properly with Android Widgets on Fragments (RecyclerView, ExpandableListView)适配器无法与 Fragments 上的 Android 小部件一起正常工作(RecyclerView、ExpandableListView)
【发布时间】:2018-07-28 00:38:03
【问题描述】:

我已经研究了一个星期,但仍然一无所获。当我准备用于 MainActivity 的相同示例时,RecyclerView 放在 Fragment 上时根本不加载任何内容。已经做了很多研究,没有找到答案。 最糟糕的是,一个示例可以正常工作并遵循相同的协议(换句话说),但其他示例无法正常工作。

所有应该存在的 XML 文件,是不是……所以,这不是问题……有什么线索吗?

我遇到了与 ExpandableListView 非常相似的问题(它适用于常规活动,并且在片段中时无法加载数据)

我放这个代码是因为应该是最简单的...

public class RecyclerFragment extends Fragment {

RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
RecyclerAdapterDroids adapter;

public RecyclerFragment() {
    // Required empty public constructor
}


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_recycler, container, false);

    recyclerView = (RecyclerView) view.findViewById(R.id.reciclerview_in_fragment);
    layoutManager = new LinearLayoutManager(view.getContext());
    adapter = new RecyclerAdapterDroids();
            //RecyclerAdapterDroids(); Inner Class
    recyclerView.setAdapter(adapter);

    return view;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState){

}





public class RecyclerAdapterDroids extends RecyclerView.Adapter<RecyclerAdapterDroids.ViewHolder>{

    private String[] droidNames = {"Beep boop beep","Twing Tweeng", "Bap Beep Bop", "Bep Beep Bite", "Boop Bing Beep"};
    private  String[] details = {"high_qualified", "stupid_friendly_lazy_bot","hard_work_doer", "strong_hyperactive","crappy_lazy_bot"};
    private  int[] images = {R.drawable.android_image_1, R.drawable.android_image_2, R.drawable.android_image_3, R.drawable.android_image_4, R.drawable.android_image_5};

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_layout, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
        viewHolder.itemName.setText(droidNames[position]);
        viewHolder.itemDetail.setText(details[position]);
        viewHolder.itemImage.setImageResource(images[position]);
    }

    @Override
    public int getItemCount() {
        return droidNames.length;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public ImageView itemImage;
        public TextView itemName;
        public TextView itemDetail;

        public ViewHolder(View itemView) {
            super(itemView);

            itemImage = (ImageView) itemView.findViewById(R.id.item_image);
            itemName = (TextView) itemView.findViewById(R.id.item_title);
            itemDetail = (TextView) itemView.findViewById(R.id.item_detail);

        }
    }
}
}

【问题讨论】:

  • layoutManager = new LinearLayoutManager(view.getContext());你在哪里设置这个管理器到recyclerView?
  • 对于片段,现在如果您检查那里的每个示例,这就是他们所说的应该完成的方式,并且在我看来也是合乎逻辑的。我已经尝试过其中的其他选项:getContext()、view.getContext()、getActivity.getApplicationContext()、getActivity.getBaseContext();此外,这应该是正确的,您正在膨胀的视图的上下文(我错了吗?)这是 RecyclerView 实际所在的位置......
  • R.id.recyclerview_in_fragment 在 R.layout.fragment_recycler 内部
  • 对象似乎“适当地”膨胀了,但控件不显示任何内容。如果我使用适配器来 .notify();应用程序崩溃了。
  • 另外,如果你有一个可行的例子,那也会让我很高兴。我一直在寻找并尝试示例,但它们不起作用。他们在活动上工作,而不是在片段中工作。

标签: android android-recyclerview crash fragment


【解决方案1】:

您尚未将布局管理器设置为您的回收站视图,这就是它没有显示的原因。

recyclerView.setLayoutManager(layoutManager)

这应该可以解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    相关资源
    最近更新 更多