2016-05-02 5 views
0

Я пытаюсь отобразить мой recyclerView на MainActivity, но, похоже, не может этого сделать. Это мой код: (который компилируется без ошибок)Отображение recyclerView on MainActivity

private RecyclerView recyclerView; 
private MyAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    recyclerView = (RecyclerView) this.findViewById(R.id.recycler_view_example); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

    adapter = new MyAdapter(this, getData()); 

    recyclerView.setAdapter(adapter); 


    // Add Code to display recyclerView on Main... 
} 

// This is not my actual data, just testing it out 
public static List<Block> getData() { 
    List<Block> data = new ArrayList<>(); 
    String[] ids = {"310", "313", "320"}; 
    String[] names = {"name of three ten", "name of three thirteen", "name of three twenty"}; 
    for (int i=0; i<ids.length; i++) { 
     data.add(new Block(ids[i], names[i])); 
    } 
    return data; 
} 

И myActivity Класс:

private final LayoutInflater inflater; 

// Data: (information) 
List<Block> data = new ArrayList<>(); 

public MyAdapter(Context context, List<Block> data) { 
    inflater = LayoutInflater.from(context); 
    this.data = data; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = inflater.inflate(R.layout.block, parent, false); 
    MyViewHolder holder = new MyViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder h, int position) { 
    MyViewHolder holder = new MyViewHolder(h.itemView); 
    Block current = data.get(position); 
    holder.id.setText(current.getId()); 
    holder.name.setText(current.getName()); 

} 

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

class MyViewHolder extends RecyclerView.ViewHolder { 
    TextView id; 
    TextView name; 
    Button button; 

    // Constructor 
    public MyViewHolder(View itemView) { 
     super(itemView); 
     id = (TextView) itemView.findViewById(R.id.the_course_id); 
     name = (TextView) itemView.findViewById(R.id.course_name); 
     button = (Button) itemView.findViewById(R.id.click); 

    } 
} 

}

Все, что я пытаюсь сделать сейчас, что, когда я бегу эмулятор, я увижу содержимое recyclerView. Но, я застрял на этом какое-то время, поскольку ничего не работает. Упомяните меня Я новичок в Android, так что простите меня, если это очень тривиально.

+1

Что делает getData() return? – Pooya

+0

«Я увижу содержимое recyclerView»? Итак, что вы хотите делать? – Raghavendra

+0

getData() возвращает список объектов, которые я хочу отобразить в MainActivity. MyAdapter, чем создает представление для каждого из этих объектов. То, к чему я стремился, - отобразить вертикальный список с содержимым каждого из этих объектов. –

ответ

0

Ok здесь вы должны изменить следующее: обновление -

recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

to 

recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); 

и в изменении класса адаптера:

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

это так. Счастливое кодирование :)

+0

Yay !!!!!!! Это исправило это. Я не понимаю, почему setLayoutManager должен был быть изменен, но я вижу, что полностью забыл реализовать метод getItemCount(). Огромное спасибо! Хороший –

0

Изменить onBindViewHolder на:

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder h, int position) { 
    Block current = data.get(position); 
    h.id.setText(current.getId()); 
    h.name.setText(current.getName()); 

} 

добавить @ SelçukCihan решение этой

EDIT

Кроме того, если вы хотите использовать свой MyViewHolder вы должны изменить следующее:

Подкласс первого класса:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> 

, а также изменить подпись для onBindViewHolder:

public void onBindViewHolder(MyViewHolder h, int position) 

и, наконец, изменить подпись вашего класса MyViewHolder:

static class MyViewHolder extends RecyclerView.ViewHolder 
+0

О, спасибо за это! Я не могу. Причина в том, что RecyclerView.ViewHolder не содержит идентификатор поля. Он содержится в классе I, созданном MyViewHolder (который расширяет RecyclerView.ViewHolder). Сначала мне хотелось изменить параметр метода OnBindViewHolder RecyclerView.ViewHolder в MyViewHolder, но он меняет сигнатуру метода и поэтому @Override не может быть применен. Что я могу сделать с этим? –

+0

@JasonGreen проверить часть ответа EDIT – Pooya

+0

Большое спасибо. Это, безусловно, намного лучше.Кроме того, могу ли я спросить, почему класс MyViewHolder должен быть объявлен «статическим»? –

1

Вы должны вернуть количество элементов в списке, в пределах getItemCount, как в:

@Override 
public int getItemCount() { 
    return data.size(); 
} 
+0

. Трудный – Pooya

+0

Да. Я полностью забыл реализовать этот метод. Я слишком доверяю Intelijj :) Спасибо. –

Смежные вопросы