2013-11-17 2 views
0

Я использую ViewPager с моим собственным PagerAdapter (Примечание: не используется FragmentPagerAdapter). Я пытаюсь общаться с моими фрагментами через свою активность, но когда я пытаюсь получить ссылку на фрагмент, он всегда возвращает null.Android: findFragmentById возвращает null

Вот мой метод Instantiate в моей пользовательской PagerAdapter:

@Override 
public Object instantiateItem(ViewGroup container, int position) { 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View itemView = null; 

    switch (position) { 
    case 0: 
     itemView = inflater.inflate(R.layout.left, container, false); 
     break; 
    case 1: 
     itemView = inflater.inflate(R.layout.middle, container, false); 
     break; 
    case 2: 
     itemView = inflater.inflate(R.layout.right, container, false); 
     break; 
    case 3: 
     itemView = inflater.inflate(R.layout.right_right, container, false); 
     break; 
    } 

    ((ViewPager) container).addView(itemView); 
    return itemView; 
} 

Вот мой XML для middle.xml:

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    android:name="com.example.testtabswipe.MiddleFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

</fragment> 

Вот мой XML для моего MiddleFragment класса (filenmae: middle_fragment. xml):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/middle_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#fff555" > 


    <TextView 
     android:text="Testing some text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:verticalSpacing="0dp" 
     android:horizontalSpacing="0dp" 
     android:stretchMode="columnWidth" 
     android:numColumns="2" 
     android:background="#fbb111" /> 

</RelativeLayout> 

И, наконец, это то, что я вызываю в своей деятельности, чтобы получить ar правочник фрагменту:

MiddleFragment middleFragment = (MiddleFragment) getSupportFragmentManager().findFragmentById(R.id.middle_fragment); 
if(middleFragment == null) 
    Log.d("Karl", "middleFragment Fragment null"); 
else 
    Log.d("Karl", "middleFragment Fragment is not null"); 

Это всегда приводит к "middleFragment Фрагмент нулевой"

Есть идеи?

PS: Это влияет на все фрагменты не только на середину.

ответ

0

Пожалуйста, ознакомьтесь с моим ответом here для связи с Fragment s внутри ViewPager. Идея состоит в том, чтобы установить новые данные в адаптере, которые вы хотите отправить на номер Fragment, и позвонить по номеру notifyDataSetChanged(), который, в свою очередь, будет звонить по телефону getItemPosition(). Откуда вы получите ссылку на Fragment:

@Override 
public int getItemPosition(Object object) { 
    if (object instanceof UpdateableFragment) { 
     ((UpdateableFragment) object).update(xyzData); 
    } 
    //don't return POSITION_NONE, avoid fragment recreation. 
    return super.getItemPosition(object); 
} 
Смежные вопросы