嗨,我相对较新,学习Android 我在这里停留使用viewpager。
我想显示可跳过的页面,并且正在使用Fragmentstatepageradapter和viewpager。页面的结构使得在上半部分中有两个动态创建的文本视图,并且基于该文本视图被点击,一些差异文本应该显示在下半部分中。
这是定义了viewpager的mainactivity xml:
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager_main"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="12"
tools:layout="@layout/fragment_main"/>
这是fragment_main的xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:weightSum="12"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_weight="6"
android:layout_height="0dp"
android:id="@+id/main_container"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textviewdown"/>
</LinearLayout>
viewpager正在使用上半部分中正确的文本视图创建可跳过的页面。对于第一页,如果我单击文本框,则下部文本视图正确打开 但是,如果我滑动到任何其他页面并单击任何textview,内容不会在同一页面中更新,而是在我访问的上一页的textviewdown的相同位置更新。我无法理解为什么。
以下是主要片段的代码:
public class PageFragment extends Fragment
public PageFragment(){
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootview = inflater.inflate(R.layout.fragment_main, container, false);
RelativeLayout mainContainer = (RelativeLayout) rootview.findViewById(R.id.main_container);
final Activity activity = getActivity();
TextView textview1 = (TextView) new TextView(activity);
textview1.setText("Click for 1");
textview1.setX(0);
textview1.setY(0);
textview1.setWidth(150);
textview1.setHeight(50);
textview1.setOnClickListener(clicktext1);
TextView textview2 = (TextView) new TextView(activity);
textview2.setText("Click for 2");
textview2.setX(0);
textview2.setY(150);
textview2.setHeight(50);
textview2.setWidth(150);
textview2.setOnClickListener(clicktext2);
mainContainer.addView(textview1);
mainContainer.addView(textview2);
return rootview;
}
View.OnClickListener clicktext1 = new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getContext(), "this is my Toast message!!! =)",
Toast.LENGTH_LONG).show();
TextView textView3 = (TextView) getActivity().findViewById(R.id.textviewdown);
textView3.setText("This is article text");
}
};
View.OnClickListener clicktext2 = new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView textView3 = (TextView) getActivity().findViewById(R.id.textviewdown);
textView3.setText("This is diff text");
}
};
以下是我正在使用的pageadapter代码:
public class PageAdapter extends FragmentStatePagerAdapter {
public PageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return new PageFragment();
}
@Override
public int getCount() {
return 5;
}
}
以下是主要活动中的调用方式:
ViewPager mViewpager2;
PageAdapter pageAdapter = new PageAdapter(getSupportFragmentManager());
mViewpager2 = (ViewPager) getActivity().findViewById(R.id.pager_main);
mViewpager2.setOffscreenPageLimit(0);
mViewpager2.setAdapter(newspageAdapter);
我已经尝试添加此功能但无效:
public int getItemPosition(Object object) {
return POSITION_NONE;
}
还尝试使用setoffscreenpagelimit值进行播放。
答案 0 :(得分:0)
解决 我必须使rootview成为一个全局变量并将其传递给onclick函数并更改以下
TextView textView3 = (TextView) getActivity().findViewById(R.id.textviewdown);
到
TextView textView3 = (TextView) rootview.findViewById(R.id.textviewdown);