[英]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.