2015-02-18 2 views
0

У меня возникла проблема, когда мне нужно отображать два текстовых вида в одном элементе списка.Отобразить несколько просмотров с помощью adgement merge в представлении списка андроидов

В одном представлении показан элемент, щелкнув по которому открывается элемент. Другой вид - значок плюс, расширяющий список со своими дочерними элементами.

Я поцарапал себе голову, но не смог найти способ определить, какой вид был выбран в виде списка.

Как-то я придумал MergeAdapter, я последовал за ним и добавил к нему два адаптера. Первый адаптер показывает фактические заголовки, а другой - только значок плюса.

Но в списке отображается только первый текстовый вид, а не значок плюса.

Что еще мне нужно в MergeAdapter, чтобы показать оба вида?

Отображает название, нажав на это должно открыть выбранный заголовок страницы

`

public class TitleAdapter extends BaseAdapter { 

    private List<Title> navItems; 
    private LayoutInflater layoutInflater; 

    public TitleAdapter(Context context, List<Title> navItems) { 
     this.layoutInflater = LayoutInflater.from(context); 
     this.navItems = navItems;  
    } 
    @Override 
    public int getCount() { 
     return navItems.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return navItems.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return navItems.get(position).getTitleID(); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 

     TextView textView = null; 

     if(convertView == null) { 
      view = layoutInflater.inflate(R.layout.drawer_list_item, parent, false); 

     } else { 
      view = convertView; 
     } 

     textView = (TextView) view.findViewById(R.id.textView); 

     Title item = (Title)getItem(position); 

     textView.setText(item.getTitle()); 

     return view; 
    } 
} 

`

Отображает значок +, нажав на нее следует добавить новые записи в списке, т.е. детей выбранного заголовка

«

public class ExpandAdapter extends BaseAdapter { 

    private int items; 
    private LayoutInflater layoutInflater; 

    public ExpandAdapter(Context context, int items) { 
     this.layoutInflater = LayoutInflater.from(context); 
     this.items = items; 

    } 
    @Override 
    public int getCount() { 
     return items; 
    } 

    @Override 
    public Object getItem(int position) { 
     return "+"; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 

     if(convertView == null) { 
      view = layoutInflater.inflate(R.layout.drawer_list_item2, parent, false); 

     } else { 
      view = convertView; 
     } 

     return view; 
    } 
} 

`

drawer_list_item: `

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/textView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:textColor="@color/dark_grey" 
      android:textSize="20sp" 
      android:textStyle="normal" 
      style="?android:attr/listSeparatorTextViewStyle" 
      android:text="Hi" /> 

`

drawer_list_item2:

`

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/expandBtn" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:textColor="@color/dark_grey" 
      android:textSize="20sp" 
      android:textStyle="normal" 
      style="?android:attr/listSeparatorTextViewStyle" 
      android:text="+" /> 

`

Но я не вижу значок плюса!

Я добавил его в MergeAdapter, как это:

`

MergeAdapter m = new MergeAdapter();   
TitleAdapter t = new TitleAdapter(this, navItems, hasChild); 
ExpandAdapter e = new ExpandAdapter(this, navItems.size()); 
m.addAdapter(t); 
m.addAdapter(e); 

`

+0

Вы можете поделиться своим примером кода? – Fahim

+0

добавлен код выше – nullpointer

ответ

1

Вы можете использовать ExpandableListView для этого он будет показывать индикатор выпадающий самостоятельно. Вы также можете изменить значок по своему выбору. Это займет всего один adapter, и вы можете заполнить child и parent отдельно. Если требование несколько отличается от этого, пожалуйста, сообщите, что мы можем обсудить.

и

Если вы не хотите использовать это, вы можете сделать это с помощью одного пользовательского адаптера и добавьте пользовательский макет к нему. После заполнения добавьте кнопку-клик для кнопки плюс, а onClick обработает видимость второго текстового элемента.

ИЛИ

Если вы хотите многослойный список вы можете захотеть, чтобы проверить this проект вне. Я не пробовал, но думаю, стоит попробовать. По умолчанию ExpanadableListView довольно ограничен, чтобы поддерживать только 2 уровня. Вы можете настроить это, чтобы заставить его поддерживать больше уровней, но это будет намного сложнее.

+0

В моем случае, когда пользователь нажимает значок «+», дети много, например, 100, чтобы разместить их в том же списке. В этом случае мне нужно перерисовать список. Также у детей может быть больше детей. Как вы думаете, Expnadable ListView мог бы все это сделать? – nullpointer

+0

Проверьте последний вариант в приведенном выше ответе, но он будет сложным. –

+0

Детским предметам слишком много, чтобы делать вложенность, мне нужно повторно заполнить список на + touch. Я не думаю, что древовидный вид и т. Д. Будут работать в этом случае. – nullpointer

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