2013-07-14 2 views
1

У меня есть рабочий код расширяемого списка, который отлично работает как автономный. У меня есть другой рабочий код для раздвижных вкладок, которые я написал отдельно.Расширяемый ListView в фрагменте

Оба они были написаны после прохождения нескольких блогов, вопросов об андроид-dev и stackoverflow.

Когда я пытаюсь объединить и поместить расширяемое listview в один из фрагментов, я получаю ошибку, я не могу ее решить.

Вот код из фрагмента части:

public class Fragment1 extends Fragment { 
private static final String NAME = "NAME"; 
private static final String IS_EVEN = "IS_EVEN"; 

private ExpandableListAdapter mAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    List<Map<String, String>> groupData = new ArrayList<Map<String, String>>(); 
    List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>(); 
    for (int i = 0; i < 10; i++) { 
     Map<String, String> curGroupMap = new HashMap<String, String>(); 
     groupData.add(curGroupMap); 
     curGroupMap.put(NAME, "Group " + i); 
     curGroupMap.put(IS_EVEN, (i % 2 == 0) ? "This group is even" : "This group is odd"); 

     List<Map<String, String>> children = new ArrayList<Map<String, String>>(); 
     for (int j = 0; j < 2; j++) { 
      Map<String, String> curChildMap = new HashMap<String, String>(); 
      children.add(curChildMap); 
      curChildMap.put(NAME, "Child " + j); 
      curChildMap.put(IS_EVEN, (j % 2 == 0) ? "This child is even" : "This child is odd"); 
     } 
     childData.add(children); 
    } 

    // Set up our adapter 
    mAdapter = new SimpleExpandableListAdapter(
      getActivity(), 
      groupData, 
      android.R.layout.simple_expandable_list_item_1, 
      new String[] { NAME, IS_EVEN }, 
      new int[] { android.R.id.text1, android.R.id.text2 }, 
      childData, 
      android.R.layout.simple_expandable_list_item_2, 
      new String[] { NAME, IS_EVEN }, 
      new int[] { android.R.id.text1, android.R.id.text2 } 
      ); 
    setListAdapter(mAdapter); 
} 

}` 

я получаю ошибку на последней строке: «Метод setListAdapter (ExpandableListAdapter) не определено для типа Fragment1».

Остальная часть кода не содержит ошибок.

Пожалуйста, помогите. Как я могу исправить эту проблему.

+0

может помочь х https://gist.github.com/mosabua/1316903 –

+0

Спасибо .. Я пробовал этот пример, но я не получаю никакого списка, когда я запускаю это на AVD, он дает экран blenk в фрагмент. – Ramanathan

ответ

5

Я был в состоянии решить проблему самостоятельно. Для справки в будущем, вот код. Может быть грязным и нуждается в очистке, но он работает сейчас!

public class HotDeals extends Fragment { 
private ExpandableListAdapter mAdapter; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,     Bundle    savedInstanceState) { 
    View v = inflater.inflate(R.layout.saved_tabs, null); 

return v; 
} 

private static final String NAME = "NAME"; 
private static final String IS_EVEN = "IS_EVEN"; 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    List<Map<String, String>> groupData = new ArrayList<Map<String, String>>(); 
    List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>(); 
    for (int i = 0; i < 10; i++) { 
     Map<String, String> curGroupMap = new HashMap<String, String>(); 
     groupData.add(curGroupMap); 
     curGroupMap.put(NAME, "Group " + i); 
     curGroupMap.put(IS_EVEN, (i % 2 == 0) ? "This group is even" : "This group is odd"); 

     List<Map<String, String>> children = new ArrayList<Map<String, String>>(); 
     for (int j = 0; j < 2; j++) { 
      Map<String, String> curChildMap = new HashMap<String, String>(); 
      children.add(curChildMap); 
      curChildMap.put(NAME, "Child " + j); 
      curChildMap.put(IS_EVEN, (j % 2 == 0) ? "This child is even" : "This   child  is odd"); 
     } 
     childData.add(children); 
    } 
    ExpandableListView lv = (ExpandableListView) getActivity().findViewById(R.id.list); 
    // Set up our adapter 
    mAdapter = new SimpleExpandableListAdapter(
      getActivity(), 
      groupData, 
      android.R.layout.simple_expandable_list_item_1, 
      new String[] { NAME, IS_EVEN }, 
      new int[] { android.R.id.text1, android.R.id.text2 }, 
      childData, 
      android.R.layout.simple_expandable_list_item_2, 
      new String[] { NAME, IS_EVEN }, 
      new int[] { android.R.id.text1, android.R.id.text2 } 
      ); 
    lv.setAdapter(mAdapter); 
} 
} 

@Divers & @Dixit - Thanx.

0

Fragment не содержит метод setListAdapter. ListFragment делаем. Вы должны расширить фрагмент из этого класса, чтобы решить эту проблему.

+1

Tried ListFragment, ошибка, которую я получаю: «Метод setListAdapter (ListAdapter) в типе ListFragment не применим для аргументов (ExpandableListAdapter)». – Ramanathan

0

Это сообщение почти 2 года, но ответа на этой странице не требуется.

ответить PO вопрос,

Метод setListAdapter (ExpandableListAdapter) не определено для типа Fragment1

Это потому, что setListAdapter является метод ListFragment или ListActivity который ждет для ListAdapter или его подклассов в качестве аргумента. Вы получаете эту ошибку, потому что вы дали ей ExpandableListAdapter, который не реализует интерфейс ListAdapter.

Надеюсь, это поможет кому-то.

+0

Да, но это не отвечает на вопрос «Как я могу исправить эту проблему?» – Damnum

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