3

Я видел некоторые подобные вопросы об этом, но все было по разным причинам (я думаю). Код, который я использую, взято из http://developer.android.com/training. Я пытаюсь создать простое приложение для контактов в соответствии с учебным пособием: http://developer.android.com/training/contacts-provider/retrieve-names.html Часть, где я получаю ошибку Настройте CursorAdapter для ListView. Это мой код:getActivity(). FindViewById (R.layout.contacts_list_view) возвращает null

@Override 
    public void onActivityCreated(Bundle savedInstanceState) 
    { 
     super.onActivityCreated(savedInstanceState); 
     mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view); 
     mCursorAdapter = new SimpleCursorAdapter(getActivity(), 
       R.layout.contacts_list_item, null, FROM_COLUMNS, TO_COLUMN, 0); 
     mContactsList.setAdapter(mCursorAdapter); 
     mContactsList.setOnItemClickListener(this); 
     getLoaderManager().initLoader(0, null, this); 
    } 

Все XML-файлы, которые были введены в действие:

contact_list_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@android:id/text1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:clickable="true"/> 

contact_list_view.xml:

<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 

Мои основная деятельность состоит из 2 FrameLayout с для фрагментов, которые нужно положить . В этом есть это XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:id="@+id/frag_contacts" 
     android:layout_width="match_parent" 
     android:layout_height="200dp" 
     android:textColor="#0a20a3" > 
    </FrameLayout> 

    <FrameLayout 
     android:id="@+id/frag_contact_details" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:textColor="#045011" /> 

</LinearLayout> 

Это onCreate деятельности:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ninth); 
     if (findViewById(R.id.frag_contacts) != null) 
     { 
      if (savedInstanceState != null) 
       return; 
      ContactsFragment contactsFrag = new ContactsFragment(); 
      getFragmentManager().beginTransaction().add(R.id.frag_contacts, contactsFrag).commit(); 
     } 
    } 

также, это onCreateView фрагмента:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.contacts_list_view, container, false); 
    } 

Теперь, жаль длинный пост, некоторые из них могут быть ненужными, но проблема в том, что в первом фрагменте getActivity().findViewById(R.layout.contacts_list_view) возвращает значение null все время! Не знаю, что еще делать. как еще я могу загрузить данные в список, и что здесь не так? Спасибо заранее!

+0

ваш список назван android.R.id.list ... – njzk2

ответ

2

Изменить этот

mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view); 

в

mContactsList = (ListView) getView().findViewById(R.id.contacts_list_view); 

Edit:

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+idlist" 

И

mContactsList = (ListView) getView().findViewById(R.id.list); 
+0

Спасибо за быстрый ответ, но он по-прежнему не работает. Я все еще получаю null. – AndroidNewbie

+0

@AndroidNewbie check the edit now 'R.id.contacts_list_view' – Raghunandan

+1

благодарит за вашу помощь – Blackbelt

2

лет у вас изменить

mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view); 

с

mContactsList = (ListView) getView().findViewById(R.id.contacts_list_view); 

Поскольку ListView принадлежит View вы вернетесь в onCreateView.

+0

Спасибо blackbelt, но посмотрите мой комментарий к Raghunandan - it не помогло. – AndroidNewbie

+0

@AndroidNewbie вам нужен id 'R.id.contacts_list_view' не макет – Raghunandan

+0

@AndroidNewbie, конечно же, вы должны проверить ListView не на макет, содержащий его – Blackbelt

0

Вам нужно подождать, пока Fragment не будет прикреплен к Activity.Вы можете сделать это в вашем onAttach(Activity)Fragment класса

1

заменить

mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view); 

в

mContactsList = (ListView) getView().findViewById(R.id.list); 

contact_list_view.xml Шоуда быть изменение следующим

<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="**@+id/list**" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
1

Если вы пытаетесь сделать getActivity(). findViewById (R.id.contacts_list_view) в onCreateVi ew, он вернет null, потому что View of Fragment еще не создан. Попробуйте сделать это в onResume и он возвращает вид:

@Override 
public void onResume() { 
    super.onResume(); 
    mContactsList = (ListView) getActivity().findViewById(R.id.contacts_list_view); 
} 
Смежные вопросы