ViewPager中的可滚动TextView

时间:2014-03-24 18:42:41

标签: android android-fragments

TextView中的Fragment内有ViewPager,我希望TextView中的文字可滚动。由于某种原因,这不起作用,textview不会滚动。

这是我尝试过的:

片段中的代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
   ViewGroup view = (ViewGroup) inflater.inflate(R.layout.fragment_profile_view, container, false);
   about = (TextView) view.findViewById(R.id.profileView_aboutContent_textView);
   about.setMovementMethod(new ScrollingMovementMethod());  
   return view;

}

的xml:

<TextView
    android:id="@+id/profileView_aboutContent_textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/profileView_age_editText"
    android:layout_alignBottom="@+id/profileView_age_editText"
    android:layout_marginLeft="30dp"
    android:layout_toRightOf="@+id/profileView_profileName_textView"
    android:scrollbars="vertical"
    android:maxLines="5"
    android:text="@string/provisional_about_text"
    android:textColor="#0066CC" />

我知道这是有效的,因为我使用它来制作一个tetxview可滚动,这是一个不在ViewPager中的片段中的活动。当我在我的片段中尝试相同时,它不起作用。 我还尝试将setmovement方法应用于片段类中的onStart方法中的textview,但这也不起作用。我还认为textview存在TextView id的问题,并且它返回null,因此我尝试将TextView文本设置为setText();在片段中查看该类是否获得了textview id并且它实际上有效,所以我不知道为什么setmovement方法不起作用。

有人知道可能是什么问题吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我弄明白了这个问题。 TextView是垂直滚动的,因为它跟随Pager View行为,它是从一个片段水平移动到另一个片段所以我不得不告诉Fragment类中的TextView不遵循父行为。

这是代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    ViewGroup view = (ViewGroup) inflater.inflate(R.layout.fragment_profile_view, container, false);
     about = (TextView) view.findViewById(R.id.profileView_aboutContent_textView);
    about.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            about.getParent().requestDisallowInterceptTouchEvent(true);
            return false;
        }
    });

     about.setMovementMethod(new ScrollingMovementMethod());  
    return view;

答案 1 :(得分:0)

将滚动视图添加到布局中的textview,就像这样...

 <ScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
<TextView
    android:id="@+id/testText"
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</ScrollView>

以下是使用Viewpager工作正常的完整代码..

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(0);
}

activity_main.xml中

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</LinearLayout>

MainActivity中的ViewPagerAdapter类

 private class ViewPagerAdapter extends FragmentStatePagerAdapter {
    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return new TestFragment();
    }

    @Override
    public int getCount() {
        return 3;
    }
}

TestFargment.java

 public class TestFragment extends Fragment
{
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View row =  inflater.inflate(R.layout.activity_main, container, false);

    TextView textView = (TextView)row.findViewById(R.id.profileView_aboutContent_textView);
    textView.setMovementMethod(new ScrollingMovementMethod());
    return row;
  }
}