我有一个非常简单的ViewPager和FragmentPagerAdapter设置的奇怪行为。
首先,这里是源代码。我在一个适配器中有3个片段。并且对应Activity中的所有按钮都有一个回调函数。
这是Fragment0
public class Fragment0 extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment0, container, false);
}
}
和Fragment0的xml布局
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:orientation= "vertical"
android:layout_width= "match_parent"
android:layout_height="match_parent">
<Button android:id= "@+id/pager_button_prev0"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "1"
android:tag= "page0"
android:onClick= "pagerTestClick"/>
<Button android:id= "@+id/pager_button_next0"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "2"
android:tag= "page0"
android:onClick= "pagerTestClick"/>
</LinearLayout>
片段1:
public class Fragment1 extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment1, container, false);
}
}
带有相应的布局
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:orientation= "vertical"
android:layout_width= "match_parent"
android:layout_height= "match_parent">
<Button android:id= "@+id/pager_button_prev1"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "2"
android:tag= "page1"
android:onClick= "pagerTestClick"/>
<Button android:id= "@+id/pager_button_next1"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "0"
android:tag= "page1"
android:onClick= "pagerTestClick"/>
</LinearLayout>
Fragment2:
public class Fragment2 extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment2, container, false);
}
}
还有简单的布局:
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:orientation= "horizontal"
android:layout_width= "match_parent"
android:layout_height="match_parent">
<Button android:id= "@+id/pager_button_prev2"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "0"
android:tag= "page2"
android:onClick= "pagerTestClick"/>
<Button android:id= "@+id/pager_button_next2"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "1"
android:tag= "page2"
android:onClick= "pagerTestClick"/>
</LinearLayout>
好的,非常简单吧?这是FragmentPagerAdapter
public class Fragment_Pager_Adapter extends android.support.v4.app.FragmentPagerAdapter
{
List<Fragment> fragments = new ArrayList<Fragment>();
/**
* default constructor
*/
public Fragment_Pager_Adapter(FragmentManager fm)
{
super(fm);
Fragment0 fragment0 = new Fragment0();
this.fragments.add(fragment0);
Fragment1 fragment1 = new Fragment1();
this.fragments.add(fragment1);
Fragment2 fragment2 = new Fragment2();
this.fragments.add(fragment2);
}
@Override
public Fragment getItem(int position)
{
if (position >= this.getCount())
{
throw new AssertionError();
}
return this.fragments.get(position);
}
@Override
public int getCount()
{
return this.fragments.size();
}
}
这里也没有伏都教。慢慢地,我们正在解决这个问题。正如您在XML布局文件中看到的那样,我为每个按钮调用“pagerTestClick”。这是功能:
public void pagerTestClick(View view)
{
int page = Integer.parseInt(((Button) view).getText().toString());
String tag = view.getTag().toString();
this.viewPager.setCurrentItem(page);
}
现在问题
当我点击3页时。首先点击一切似乎很好。但在某个时刻,某些东西搞砸了。即使我在page1上并单击按钮“0”到达page0,似乎为page2上的按钮调用了“pagerTestClick”函数,因为“tag”字符串是“page2”。
我做错了吗?或者这是一个已知的错误?
其他问题
如果我通过滑动浏览页面,everthings在所有页面上都能正常工作(例如,如果我在每个页面上添加一些额外的按钮)但是当我使用“setCurrentItem”并手动选择页面时,似乎可点击区域不是页面的完整大小。这意味着,如果我在页面上添加一些额外的UI按钮,其中只有一些是可点击的。 如果我滑动转换到page0然后滑动到pageX,那么一切正常。
**整个问题可能与“setCurrentItem”有关吗?在调用“setCurrentItem”后,我是否需要调用任何特殊内容?
更奇怪的行为
我发现了一个更奇怪的行为。当我通过“setCurrentItem”点击页面时,在某些时候我似乎可以单击“浏览”当前页面并单击之前显示的页面上的按钮。这意味着,当我在第2页,并点击带有“setCurrentItem”的page1时,似乎我仍然可以点击page2的元素(对于这种情况,我在每个页面上添加了一些广泛分布的虚拟按钮)