Android ViewPager查找findviewbyid的片段

Android ViewPager查找findviewbyid的片段,android,android-viewpager,fragment,Android,Android Viewpager,Fragment,如果你想知道,不,我没有错过与我的问题类似的数百条线索。然而,没有一个对我有效。我想在FragmentActivity中使用findviewbyid。我基本上是使用示例android实现和在线提出的解决方案来查找片段 Main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

如果你想知道,不,我没有错过与我的问题类似的数百条线索。然而,没有一个对我有效。我想在FragmentActivity中使用findviewbyid。我基本上是使用示例android实现和在线提出的解决方案来查找片段

Main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    >

    <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" />

</RelativeLayout>
MyFragment.java

package com.multiwii.multiwiiremote;

public class MyFragment extends Fragment {
    int mCurrentPage;
    View v = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /** Getting the arguments to the Bundle object */
        Bundle data = getArguments();

        /** Getting integer data of the key current_page from the bundle */
        mCurrentPage = data.getInt("current_page", 0);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        switch (mCurrentPage) {
        case 1:
            v = inflater.inflate(R.layout.main_control, container, false);
            break;
        case 2:
            v = inflater.inflate(R.layout.graph, container, false);
            break;
        case 3:
            v = inflater.inflate(R.layout.settings, container, false);
            break;
        }
        return v;
    }
//  public void setRollProgressBar(int value) {
//      if (v == null || mCurrentPage != 1) return;
//      ProgressBar bar = (ProgressBar) v.findViewById(R.id.rollProgressbar);
//      if(bar != null)
//      bar.setProgress(value);
//  }

最后一个问题:如何从FragmentActivity(MainActivity)获取视图/片段?

从您可以调用的FragmentActivity

public Object instantiateItem (ViewGroup container, int position)
这是适配器的一种方法。你会在这个位置拿回碎片。一旦获得了片段,就可以调用其中的任何公共方法。容器将是实际的viewPager

以下是此功能的文档:


,int)

当您知道解决方案时,非常简单…,谢谢!但是,由于某些原因,UI线程没有被更新?!?我使用的是setRollProgressBar(int值),您可以在我的上一个文件(MyFragment.java)中看到,如果我得到位置栏getProgress(),它将被更新,但UI上的实际控件不是。有什么想法吗?您的代码实际上到达了这行代码“bar.setProgress(value);”?调试并让我知道。不是将v(根片段视图作为全局变量,您可以使用getView().findviewbyd(R.id.rollProgressbar)来查找该视图)保留为是,而是在更新进度时到达该代码。但是,在设备屏幕上,进度没有被更新。事实上,如果我向右滑动两次(我有3个片段),第一个片段开始被更新…你应该传递的视图组是什么?
package com.multiwii.multiwiiremote;

public class MyFragment extends Fragment {
    int mCurrentPage;
    View v = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /** Getting the arguments to the Bundle object */
        Bundle data = getArguments();

        /** Getting integer data of the key current_page from the bundle */
        mCurrentPage = data.getInt("current_page", 0);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        switch (mCurrentPage) {
        case 1:
            v = inflater.inflate(R.layout.main_control, container, false);
            break;
        case 2:
            v = inflater.inflate(R.layout.graph, container, false);
            break;
        case 3:
            v = inflater.inflate(R.layout.settings, container, false);
            break;
        }
        return v;
    }
//  public void setRollProgressBar(int value) {
//      if (v == null || mCurrentPage != 1) return;
//      ProgressBar bar = (ProgressBar) v.findViewById(R.id.rollProgressbar);
//      if(bar != null)
//      bar.setProgress(value);
//  }
public Object instantiateItem (ViewGroup container, int position)