2015-05-06 1 views
15

Ich möchte diese Elemente in meinem Recyclerview zeigen, aber es zeigt überhaupt nicht und ich kann den Fehler nicht sehen. Vielleicht könnt ihr mir helfen.Android Recyclerview zeigt keine Elemente

MainActivity.java

RecyclerView recyclerView = (RecyclerView)findViewById(R.id.rec); 
List<MenuData> list = new ArrayList<>(); 
     recyclerView.setHasFixedSize(true); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
     linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(linearLayoutManager); 

     MenuRecAdapter menuRecAdapter = new MenuRecAdapter(list); 
     recyclerView.setAdapter(menuRecAdapter); 

RecyclerView Adapter:

public class MenuRecAdapter extends RecyclerView.Adapter<RecViewHolder>{ 

    private List<MenuData> mList; 
    Activity context; 

    public MenuRecAdapter(List<MenuData> mList){ 
     this.mList = mList; 
    } 

    public int getItemCount(){ 
     return mList.size(); 
    } 

    public RecViewHolder onCreateViewHolder(ViewGroup viewGroup, int position){ 

     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.menuitem, viewGroup, false); 
     RecViewHolder pvh = new RecViewHolder(v); 
     return pvh; 
    } 

    public void onBindViewHolder(RecViewHolder holder, int i){ 
     holder.menuTeXT.setText(mList.get(i).text); 
    } 

    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

} 

ViewHolder der Einzelteile:

public class RecViewHolder extends RecyclerView.ViewHolder { 

    public TextView menuTeXT; 

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

     menuTeXT = (TextView)itemView.findViewById(R.id.menuTXT); 
    } 
} 

und die Daten, die ich in meinen recyclerview setzen wollen (was doesn t anzeigen):

class MenuData { 

    String text; 

    MenuData(String text){ 
     this.text = text; 
    } 

    private List<MenuData> list; 

    private void initializeData(){ 
     list = new ArrayList<>(); 
     list.add(new MenuData("Featured")); 
     list.add(new MenuData("Categories")); 
     list.add(new MenuData("Sell")); 
     list.add(new MenuData("Settings")); 
     list.add(new MenuData("Logout")); 
    } 

} 

Vielen Dank im Voraus

+0

haben Sie ein Objekt von MenuData erstellt und initializeData() aufgerufen, um eine Liste zu erstellen und sie an den Adapter zu übergeben? –

+0

Ich weiß nicht wirklich was du meinst. – svenvdz

+0

Wenn Sie 'MenuRecAdapter schreiben menuRecAdapter = new MenuRecAdapter (list);' Ist die 'liste' bereits erstellt? –

Antwort

36

In MainActivity

ArrayList<String> list = new ArrayList<>(); 
list.add("something1"); 
list.add("something2"); 

RecyclerView recyclerView = (RecyclerView)findViewById(R.id.rec); 
recyclerView.setHasFixedSize(true); 

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
recyclerView.setLayoutManager(linearLayoutManager); 

MenuRecAdapter menuRecAdapter = new MenuRecAdapter(list); 
recyclerView.setAdapter(menuRecAdapter); 

RecyclerView Adapter

public class MenuRecAdapter extends RecyclerView.Adapter<RecViewHolder>{ 

private ArrayList<String> mList = new ArrayList<>(); 
Activity context; 

public MenuRecAdapter(ArrayList<String> mList){ 
    this.mList = mList; 
} 

public int getItemCount(){ 
    return mList.size(); 
} 

public RecViewHolder onCreateViewHolder(ViewGroup viewGroup, int position){ 

    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.menuitem, viewGroup, false); 
    RecViewHolder pvh = new RecViewHolder(v); 
    return pvh; 
} 

public void onBindViewHolder(RecViewHolder holder, int i){ 
    holder.menuTeXT.setText(mList.get(i)); 
} 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 
} 

und ViewHolder bleibt gleich versuchen ...

public class RecViewHolder extends RecyclerView.ViewHolder { 

public TextView menuTeXT; 

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

    menuTeXT = (TextView)itemView.findViewById(R.id.menuTXT); 
} 
} 

auch von MenuData Klasse loszuwerden. Der obige Code sollte gut funktionieren.

+0

danke habe ich nie darüber nachgedacht;) – svenvdz

+2

Wenn ich dir eine Stimme geben könnte würde ich – svenvdz

+0

Froh ich könnte helfen. Einen schönen Tag noch :) –

0

Da Sie keine Daten bekommen, ich denke, das Problem zu der Zeit passiert, sehen Sie die Liste in den Adapter übergeben. Ich sehe, dass Sie keine Kopie Ihrer Liste erstellt haben, also übergeben Sie die Referenz der Liste direkt in den Adapter. Ich schlage vor, Sie MenuRecAdapter menuRecAdapter = new MenuRecAdapter(new Arraylist(list));

+0

Immer noch keine Artikel – svenvdz

+0

Ich habe nicht gesehen, dass Sie in Ihrem Code irgendeine Instanz von MenuData erstellt haben. Natürlich ist deine Liste leer. – yongsunCN