简体   繁体   English

片段中的Android回收视图不起作用

[英]Android recycle view in fragment not working

My Adapter 我的适配器

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

// Store a member variable for the contacts
private List<AppDepartments> mDepartments;
// Store the context for easy access
private Context mContext;


@Override
public DepartmentsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);

    // Inflate the custom layout
    View contactView = inflater.inflate(R.layout.app_department_item, parent, false);
    // Return a new holder instance
    ViewHolder viewHolder = new ViewHolder(contactView);
    return viewHolder;
}

// Involves populating data into the item through holder
@Override
public void onBindViewHolder(DepartmentsAdapter.ViewHolder holder, int position) {
    AppDepartments appDepartments = mDepartments.get(position);
    // Set item views based on your views and data model
   /* holder.txtViewName.setText(appDepartments.getDeptName());
    holder.txtViewUser.setText(appDepartments.getDeptUser());*/
    holder.txtViewName.setText("HELLO");
    holder.txtViewUser.setText("ITS VICTOR");

}

@Override
public long getItemId(int i) {
    return 0;
}

@Override
public int getItemCount() {
    return 0;
}

My Fragment 我的片段

public class DiscoverFragment extends Fragment {

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


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView =  inflater.inflate(R.layout.fragment_discover, container, false);
    departmentsAdapter = new DepartmentsAdapter(getActivity(),departList);
    // Lookup the recyclerview in activity layout
    RecyclerView displayDeparts = (RecyclerView) rootView.findViewById(R.id.appDepartments);
    displayDeparts.setAdapter(departmentsAdapter);
    displayDeparts.setLayoutManager(new LinearLayoutManager(getActivity()));
    // Inflate the layout for this fragment
    return rootView;
}

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

}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

} }

The above code returns a blank screen,the textviews are not displayed. 上面的代码返回一个空白屏幕,不显示textviews。 Kindly help. 请帮助。 I have commented out the model so that i can test with hard coded texts. 我已注释掉模型,以便可以使用硬编码文本进行测试。 I was following this post http://guides.codepath.com/android/Using-the-RecyclerView 我正在关注这篇文章http://guides.codepath.com/android/Using-the-RecyclerView

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

(not sure it will completely solve your problem) (不确定是否可以完全解决您的问题)

You need to set LayoutManager to RecyclerView before setting adapter. 设置适配器之前,需要将LayoutManager设置为RecyclerView

change code like this 像这样更改代码

displayDeparts.setLayoutManager(new LinearLayoutManager(getActivity()));
displayDeparts.setAdapter(departmentsAdapter);

Try moving your code onViewCreated as below from my code : 尝试将以下代码从我的代码onViewCreated

   @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);

        pref = getActivity().getSharedPreferences("AppPreference", Context.MODE_PRIVATE);
        edit = pref.edit();

        swipe_container_reports = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container_reports);

        swipe_container_reports.setColorSchemeResources(
                R.color.colorAccent,
                R.color.colorPrimaryDark,
                R.color.cardview_dark_background);

        swipe_container_reports.setOnRefreshListener(this);

        //Recycler View
        recyclerView = (RecyclerView) view.findViewById(R.id.reports_recycler);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(layoutManager);

        swipe_container_reports.setRefreshing(true);

        reportingUserTask = (ReportingUserTask) new ReportingUserTask(getContext(), Integer.valueOf(pref.getString("UserId", "")));
        reportingUserTask.setOnFinishListener(this);
        reportingUserTask.execute();

    }

also when the Task is finish in call Following : 在任务完成时,也可以调用以下命令:

adapter = new ReportRecyclerAdapter((ArrayList<ReportDetail>) reportDetailList, Integer.valueOf(pref.getString("UserId", "")), getContext());
recyclerView.setAdapter(adapter);

This works flawlessly for me 这对我来说完美无瑕

In your code: setLayoutManager(new LinearLayoutManager(getActivity())) before setAdapter(departmentsAdapter) . 在您的代码中: setAdapter(departmentsAdapter)之前的setLayoutManager(new LinearLayoutManager(getActivity())) setAdapter(departmentsAdapter)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_discover, container, false);
    displayDeparts.setLayoutManager(new LinearLayoutManager(getActivity()));
    departmentsAdapter = new DepartmentsAdapter(getActivity(), departList);
    // Lookup the recyclerview in activity layout
    RecyclerView displayDeparts = (RecyclerView) rootView.findViewById(R.id.appDepartments);
    displayDeparts.setAdapter(departmentsAdapter);
    // Inflate the layout for this fragment
    return rootView;
}

Try making these changes: 尝试进行以下更改:

@Override
public long getItemId(int i) {
    return i;
}

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

First you have to set LayoutManager and then setAdapter to recyclerView like this: 首先,您必须设置LayoutManager,然后将setAdapter设置为recyclerView,如下所示:

RecyclerView displayDeparts = (RecyclerView) rootView.findViewById(R.id.appDepartments);
departmentsAdapter = new DepartmentsAdapter(getActivity(),departList);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
displayDeparts.setLayoutManager(mLayoutManager);
displayDeparts.setAdapter(departmentsAdapter);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM