2016-08-18 2 views
0

Я следую [этому] [1] учебному пособию, я успешно создал альбомы, что я хотел бы сделать сейчас, это сказать или пример после 4 альбомов. Я хотел бы добавить некоторые пробелы, поэтому я могу добавить TextField, вот мой вопрос:Создайте пробел для добавления textView

  1. Как бы создать требуемые пробелы?
  2. Как бы добавить в текстовое поле в этом конкретном месте?

Это то, что я пробовал. Пример кода имеет метод для подготовки альбома, я разделить метод на два способами:

private void prepareAlbums() { 
     int[] covers = new int[]{ 
       R.drawable.album1, 
       R.drawable.album2, 
       R.drawable.album3, 
       R.drawable.album4, 
       R.drawable.album5, 
       R.drawable.album6, 
       R.drawable.album7, 
       R.drawable.album8, 
       R.drawable.album9, 
       R.drawable.album10, 
       R.drawable.album11}; 

     Album a = new Album("True Romance", 13, covers[0]); 
     albumList.add(a); 

     a = new Album("Xscpae", 8, covers[1]); 
     albumList.add(a); 

     a = new Album("Maroon 5", 11, covers[2]); 
     albumList.add(a); 

     a = new Album("Born to Die", 12, covers[3]); 
     albumList.add(a); 

     rootView.setPadding(0,100,0,0); 


     adapter.notifyDataSetChanged(); 
    } 

и ...

private void prepareAlbums2(){ 
     int[] covers = new int[]{ 
       R.drawable.album1, 
       R.drawable.album2, 
       R.drawable.album3, 
       R.drawable.album4, 
       R.drawable.album5, 
       R.drawable.album6, 
       R.drawable.album7, 
       R.drawable.album8, 
       R.drawable.album9, 
       R.drawable.album10, 
       R.drawable.album11}; 
     Album a = new Album("Honeymoon", 14, covers[4]); 
     albumList.add(a); 

     a = new Album("I Need a Doctor", 1, covers[5]); 
     albumList.add(a); 

     a = new Album("Loud", 11, covers[6]); 
     albumList.add(a); 

     a = new Album("Legend", 14, covers[7]); 
     albumList.add(a); 

     a = new Album("Hello", 11, covers[8]); 
     albumList.add(a); 

     a = new Album("Greatest Hits", 17, covers[9]); 
     albumList.add(a); 

     adapter.notifyDataSetChanged(); 

    } 
} 

Тогда внутри моего OnCreate метод, который я сделал следующее:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

... 

    prepareAlbums(); 
    rootView.setPadding(0,100,0,0); 
    prepareAlbums2(); 

... 
    return rootView; 
} 

Однако ничто не кажется, происходит, когда я делаю это, и я понятия не имею, как добавить текст в таком положении, когда я создал интервал, любая помощь очень ценится.

Если вам нужна другая информация, пожалуйста, спросите и обновите это сообщение.

+0

Используйте пробел или View, чтобы добавить определенное количество пространства в файле XML –

+0

Как я сделал бы, что в определенном месте, где Я хочу, чтобы это было? потому что я использую методы альбома для создания альбомов, как бы я это сделал сразу после 4 альбомов, например, – BadCodersHub

+1

добавьте изображение, объясняющее, что вы хотите, очистит ваше требование. поэтому покрасьте свое оформление, а затем добавьте сюда. –

ответ

0

Изменить класс GridSpacingItemDecoration, чтобы добавить дополнительное пространство в нижней части двух карт, которые попадают в положение X и X + 1.

Update:

Учитывая, что вы хотите текстовое представление в там, оказывается, не слишком сложно. There is a great example here

Решение включает в себя создание обратного вызова для динамического определения количества столбцов на основе позиции. Вам нужно будет изменить размер пролета, чтобы вернуть его, когда позиция вы нажмете на четвертую позицию.

GridLayoutManager manager = new GridLayoutManager(this, 3); 
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
    @Override 
    public int getSpanSize(int position) { 
    return (3 - position % 3); 
    } 
}); 
recyclerView.setLayoutManager(manager); 

Вам также необходимо создать корпус в адаптере для представления TextView вместо обычного вида карты.

Обновление 8/19/2016 Добавлено Detail:

В MainActivity, добавить функцию обратного вызова, чтобы вернуть размер диапазона в соответствии с положением. Мы определим позицию, добавив фиктивное значение в набор данных.

((GridLayoutManager)mLayoutManager).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
     @Override 
     public int getSpanSize(int position) { 
      if (albumList.get(position).getName().length() == 0) 
       return 2; 
      return 1; 
     } 
     }); 

При добавлении данных добавьте фиктивное значение, куда должен идти текст. В идеале вы можете просто изменить класс или добавить атрибут в класс. Для простоты альбом без имени будет текстовой строкой.

a = new Album("Born to Die", 12, covers[3]); 
albumList.add(a); 

albumList.add(new Album("",0, 0)); 

a = new Album("Honeymoon", 14, covers[4]); 
albumList.add(a); 

Наконец, в коде адаптера, переопределить метод getItemViewType() так, что ваш RecyclerView может поддерживать несколько типов представлений.

// Change the extending class type 
public class AlbumsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

// Add this 
public class TextViewHolder extends RecyclerView.ViewHolder { 
     public TextView textView; 
     public TextViewHolder(View itemView) { 
     super(itemView); 
     textView = (TextView) itemView.findViewById(R.id.text3); 
     } 
    } 

// Add this 
@Override 
public int getItemViewType(int position) { 
    if (albumList.get(position).getName().length() == 0) 
     return 1; 
    return 0; 
} 

@Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = null; 
     switch (viewType) { 
     case 0: 
      itemView = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.album_card, parent, false); 
      return new MyViewHolder(itemView); 
     case 1: 
      itemView = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.text_layout, parent, false); 
      return new TextViewHolder(itemView); 
     } 

     return null; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     Album album = albumList.get(position); 
     if (album.getName().length() == 0) { 
     TextViewHolder text = (TextViewHolder)holder; 
     text.textView.setText("New Text"); 
     } else { 
     final MyViewHolder myHolder = (MyViewHolder)holder; 
     myHolder.title.setText(album.getName()); 
     myHolder.count.setText(album.getNumOfSongs() + " songs"); 

     // loading album cover using Glide library 
     Glide.with(mContext).load(album.getThumbnail()).into(myHolder.thumbnail); 

     myHolder.overflow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       showPopupMenu(myHolder.overflow); 
      } 
     }); 
     } 
    } 
} 

Вам также потребуется макет для TextView строки

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 
<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/text3"/> 
</LinearLayout> 
+0

не в настоящее время на ПК. Попробуйте это, когда я вернусь, хотя, хотя один вопрос, если я сделаю то, что вы предложили wouldnt это создает пробел для каждых 2 карт? я просто хочу, чтобы первые 4 были сгруппированы, как и выше, затем «мой текст», а остальные из них были сгруппированы, а не разбивались каждые 2 или около того, если это имеет смысл. – BadCodersHub

+0

О, я пропустил требование для текста между ними. Печать была довольно маленькой, и я решил, что это просто говорит, что пространство идет сюда или что-то в этом роде. Это решение не сработает. –

+0

У вас есть другие идеи, как это сделать? Я пробовал несколько дней, прежде чем спрашивать здесь, и я очень застрял. – BadCodersHub

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