2014-09-03 2 views
0

Я создал фрагмент unity_view, который содержит ListView:Android Fragment и ListView адаптер проблема

<ListView 
    android:id="@+id/listViewUnity" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_marginLeft="90dp" 
    android:layout_toRightOf="@+id/firstName" > 
</ListView> 

Следующий код (класс расширяет фрагмент) генерировать нулевое исключение:

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

    // If activity recreated (such as from screen rotate), restore 
    // the previous article selection set by onSaveInstanceState(). 
    // This is primarily necessary when in the two-pane layout. 
    if (savedInstanceState != null) { 
     mCurrentPosition = savedInstanceState.getInt(ARG_POSITION); 
    } 

    final ListView listview = (ListView) this.getActivity().findViewById(R.id.listViewUnity); 
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
     "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
     "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", 
     "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2", 
     "Android", "iPhone", "WindowsMobile" }; 

    final ArrayList<String> list = new ArrayList<String>(); 
    for (int i = 0; i < values.length; ++i) { 
     list.add(values[i]); 
    } 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(), 
     android.R.layout.simple_list_item_activated_1); 
    listview.setAdapter(adapter); 

    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.unity_view, container, false); 
} 

Два вопросы:

  1. Вы знаете, почему listview.setAdapter не удалось?
  2. Должен ли я не включать listViewUnity как выбор в android.R.layout?

ответ

0

Сначала вы не можете найти android.R.layout.listViewUnity, потому что android.R.layout - это внутренние макеты Android, которые вы не можете изменить. Вместо этого вы получаете доступ к своим собственным макетам с помощью R.layout.listViewUnity.

Второй ваш ListView находится в макете фрагмента (unity_view.xml). Чтобы получить доступ к этому из кода он сначала должен быть надут:

View layout = inflater.inflate(R.layout.unity_view, container, false); 
final ListView listview = (ListView) findViewById(R.id.listViewUnity); 
// Do something else 

return layout; 

Наконец, когда вы создаете адаптер передать деятельность в контексте вместе с вашими деталями вместе, чтобы они заселяются в списке:

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
     android.R.layout.simple_list_item_1, list); 
0

Вы пытаетесь получить ListView от Activity, но он находится в макете вашего Fragment. Попробуйте это:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.unity_view, container, false); 

    final ListView listview = (ListView) view.findViewById(R.id.listViewUnity); 
    // Do something with your ListView 

    return view; 

}

Насколько я знаю, нет listViewUnity макета в Android SDK.

+0

Да, это был произвольный список. Благодаря! –

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