0

Mein AdapterAndroid recycle Ansicht Fragment nicht funktioniert

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; 
} 

Mein 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"); 
    } 
} 

}

Der obige Code einen leeren Bildschirm zurückkehrt, werden die Textviews nicht angezeigt . Freundlich helfen. Ich habe das Modell auskommentiert, so dass ich mit fest codierten Texten testen kann. Ich folgte diesem Beitrag http://guides.codepath.com/android/Using-the-RecyclerView

+0

vergessen Sie nicht '' departList Werte zu füllen – hakim

+0

Sie nicht hinzugefügt haben Wert zu depleteList und in getItemCount von Adapter zurück departList.size() anstelle von 0 –

Antwort

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

(nicht sicher, es wird Ihr Problem vollständig lösen)

+0

höchstwahrscheinlich wird App zum Absturz, da 'mDepartments' bei OP-Beispielcode ist immer noch null – hakim

+0

Ja, weil es noch nicht instanziiert ist. Versuchen Sie Folgendes zu tun: 'private Liste mDepartments = neue ArrayList ();' – Sigma

+0

Statt nur Größe zurückgeben, tun Sie dies ... 'zurück mDepartments == null? 0: mDepartments.size(); ' – arcticwhite

0

In Ihrem Code: setLayoutManager(new LinearLayoutManager(getActivity())) vor 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; 
} 
1

Sie benötigen, bevor Sie Adapter LayoutManager-RecyclerView einzustellen.

ändern Code wie dieser

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

Versuchen Sie, diese Änderungen vorzunehmen:

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

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

Versuchen Sie Ihren Code onViewCreated wie unten von meinem Code zu bewegen:

@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(); 

    } 

auch wenn die Aufgabe ist Anruf beenden Folgen:

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

Dies funktioniert für mich einwandfrei

0

Zuerst haben Layoutmanager zu setzen und dann setAdapter wie diese 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); 
Verwandte Themen