我正在使用ViewPager和我自己的PagerAdapter(注意:不使用FragmentPagerAdapter)。我试图通过我的Activity与我的片段进行通信,但是当我尝试获取对片段的引用时,它总是返回null。
这是我在自定义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;
}
这是我的mid.xml 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>
这是我的MiddleFragment类的xml(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>
最后,这就是我在我的Activity中调用以获取片段的引用:
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 Fragment null”
有什么想法吗?
PS:这会影响所有片段而不仅仅是中间片段。
答案 0 :(得分:0)
请查看我的回答here,以便与Fragment
内的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);
}