1

Как я могу добавить виды внутри LinearLayout в ListView? Я хочу отобразить некоторую дополнительную информацию внутри ListView, и я хочу добавить их в цикл for, проходящий через добавляемые элементы. Вот код, который я в настоящее время:Android добавить виды внутри ListView

активность:

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:scrollbars="vertical" 
      android:layout_marginTop="0dp" /> 

</LinearLayout> 

list_recycler:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:paddingRight="?android:attr/scrollbarSize"> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="15dp" 
     android:layout_marginEnd="6dp" 
     android:layout_marginTop="6dp" 
     android:layout_marginBottom="6dp"> 

     <TextView android:id="@+id/list_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/textColor" 
      android:textSize="16sp" 
      android:layout_alignParentLeft="true"/> 

     <TextView android:id="@+id/list_title_summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/textColor" 
      android:textSize="16sp" 
      android:layout_alignParentLeft="true"/> 


     <!-- VIEWS SHOULD BE ADDED HERE --> 
     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

     </LinearLayout> 

    </RelativeLayout> 

</LinearLayout> 

адаптер:

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.RecyclerViewHolder> { 

    public static class RecyclerViewHolder extends RecyclerView.ViewHolder { 

     TextView personName; 
     TextView personAge; 

     RecyclerViewHolder(View itemView) { 
      super(itemView); 
      personName = (TextView)itemView.findViewById(R.id.person_name); 
      personAge = (TextView)itemView.findViewById(R.id.person_age); 
     } 
    } 

    List<Items> list; 

    public RVAdapter(List<Items> list){ 
     this.list = list; 
    } 

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

    @Override 
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_recycler, viewGroup, false); 
     return new RecyclerViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(RecyclerViewHolder recyclerViewHolder, int i) { 
     recyclerViewHolder.personName.setText(persons.get(i).name); 
     recyclerViewHolder.personAge.setText(persons.get(i).age); 
    } 

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

Предметы:

public class Items { 
    String name; 
    String age; 

    public Items(String name, String age) { 
     this.name = name; 
     this.age = age; 
    } 
} 

Как я могу добавить виды в LinearLayout в ListView? Каждый LinearLayout в разных элементах ListView должен содержать разные представления, поэтому они не могут быть одинаковыми.

Как мои данные будут выглядеть следующим образом:

ListView 
    Entry1 
     LinearLayout 
      SubEntry1 
      SubEntry2 
      SubEntry3 
    Entry2 
     LinearLayout 
      SubEntry1 
      SubEntry2 
      SubEntry3 
    Entry3 
     LinearLayout 
      SubEntry1 
      SubEntry2 
      SubEntry3 

Так Entry1..Entry3 являются ListViews, все Подэлементы должны быть TextViews добавлены кода в LinearLayout внутри соответствующей записи ListView

+0

Смотрите ссылку ниже http://stackoverflow.com/questions/4540754/dynamically-add-elements-to-a-listview-android – AnixPasBesoin

+0

Я не хочу добавьте элементы в ListViews, я хочу добавить Views (например TextView) внутри LinearLayout внутри ListView. Я знаю, как добавлять элементы в ListView – Broadwell

+1

Если вы хотите «добавить» TextView внутри своей пользовательской строки ListView, почему бы не добавить его в макет уже с атрибутом android: visibility = «gone». Затем измените его атрибут на «VIEW.VISIBLE» на выбранные строки, которые вы хотите видеть внутри своего пользовательского адаптера. –

ответ

2

Дайте макет id, скажем @+id/item_content, то в вашем getView сделать:

itemContent = (LinearLayout)convertView.findViewById(R.id.item_content); 
itemContent.removeAllViews(); 
//then you can add your views to the layouts depending on each item here using 
itemContent.addView(yourView); 

Вы не можете просто цикл по ListView элементов и добавить к нему контент. Для этого у нас есть адаптер. Обновите данные и сообщите об этом адаптеру.

В этом контексте я советую использовать RecyclerView.

EDIT

Что вы добавили не структуру данных, но ваша структура макета. В любом случае, вы должны иметь это.

public class RowItem { 
    private final String title; 
    private final String desc; 
    private ArrayList<String> contents; 
} 

, а затем вы сделаете это;

itemContent = (LinearLayout)convertView.findViewById(R.id.item_content); 
itemContent.removeAllViews(); 
//then you can add your views to the layouts depending on each item here using 
for(String item : rowItem.getContents()){ 
    TextView textView = new TextView(parent.getContext()); 
    textView.setText(item); 
    itemContent.addView(textView); 
} 

RecyclerView Чтение и ExpandableListView

+0

Не могли бы вы разместить немного больше кода, как бы я его реализовал? – Broadwell

+0

@Broadwell Сообщите нам, как выглядят ваши данные. – Olayinka

+0

Я обновил вопрос, включив в него базовую схему – Broadwell

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