2016-04-07 7 views
0

Я разрабатываю свое первое приложение для Android в прошлые дни, используя это руководство: Material Design Guide от Google.Плитка Фрагмент, как мне получить различный контент в разных плитах?

Я решил пойти на фрагменты плитки по своему выбору, но проблема в том, что содержимое этих плит статично/содержание в плитке 1 такое же, как в плитке 2, 3, 4 и т. Д. Как изменить это, чтобы каждая плитка имела уникальный контент?

Любая помощь была бы принята с благодарностью!

ответ

0

Обычно у вас есть данные, которые вы хотели бы представить в этом формате. Обычно это будет передано в ContentAdapter, чтобы вы могли использовать его для заполнения каждого фрагмента. В настоящий момент все содержимое устанавливается в XML, а не в вашем адаптере.

Если вы хотите изменить изображения для каждого нужно добавить атрибут ID в item_tile макете:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:padding="@dimen/tile_padding"> 

    <ImageView 
     !--Add the id for the ImageView--> 
     android:id="@+id/tile_image" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/tile_height" 
     android:scaleType="centerCrop" 
     android:src="@drawable/paris" /> 

    ... 
</RelativeLayout> 

Тогда вы должны изменить класс ViewHolder в TileContentFragment, так что мы можем достать из ImageView и TextView в item_tile макет.

public static class ViewHolder extends RecyclerView.ViewHolder { 

    ImageView tileImage; 
    TextView tileTitle; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     this.tileImage = (ImageView) itemView.findViewById(R.id.tile_image); 
     this.tileTitle = (TextView) itemView.findViewById(R.id.tile_title); 
    } 
} 

Тогда просто для примера позволяет установить название каждой плитку на «Привет»:

public static class ContentAdapter extends RecyclerView.Adapter<ViewHolder> { 

    Other class methods... 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tile, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.tileTitle.setText("Hello"); 
     //If you had images for the different tile you could set them here too 
     //holder.tileImage.setImageResource([THE ID OF YOUR IMAGE HERE]) 
    } 
} 

Надеется, что это помогает.

+0

Спасибо! Я попробую его и отчитаюсь, когда я это сделаю –

+0

ВОПРОС № 1: «TextView tileText» не «TextView tileText» в «public static class ViewHolder ..» должен быть «TextView tileTitle», как в «tileTitle» = (TextView) tileItem.findViewById ... «in» public ViewHolder (LayoutInflater ..) ниже? /// /// У меня также есть несколько ошибок при запуске приложения: ОШИБКА № 1: В «public ViewHolder() { ошибка: конструктор ViewHolder в классе ViewHolder не может применяться к заданным типам; требуется: Вид найдено: нет аргументов причин: фактические и формальные списки аргументов различаются по длине « //// ОШИБКА # 2: Кроме того, в» общественном ViewHolder() { «ошибка: вызов к супер должен быть первым оператором in constructor " –

+0

Да, вы правы в имени переменной, я делал это в браузере, чтобы был шанс на ошибки! –