1

我有一个Fragment是 a 的一部分ViewPager。在这Fragment我有一个ViewGroup孩子。现在,为什么在实例化了 my and之后,在 myMainActivity中, my得到了?onCreate()ViewPageradapterContainernull

这是我的onCreate()

private MyAdapter mAdapter;
private ViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mAdapter = new MyAdapter(getSupportFragmentManager());

    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);

    mContainerView = (ViewGroup) findViewById(R.id.container);
    //Here mContainerView is already null
    ...
}

这是包含Fragment的 a 的一部分ViewPagermContainerView

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<ScrollView android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- This is my ViewGroup -->
   <LinearLayout android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:showDividers="middle"
        android:divider="?android:dividerHorizontal"
        android:animateLayoutChanges="true"
        android:paddingLeft="16dp"
        android:paddingRight="16dp" />

</ScrollView>

<TextView android:id="@android:id/empty"
    style="?android:textAppearanceSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:padding="32dp"
    android:text="@string/message_empty_layout_changes"
    android:textColor="?android:textColorSecondary" />

</FrameLayout>
4

1 回答 1

1

如果我正确阅读了您的问题,那么您正在尝试使用'方法访问Fragment' View(和子级)。这不应该起作用,因为它自己的布局膨胀并且不是传统的。ActivityfindViewById()FragmentFragmentsViews

如果您知道Fragment已实例化并且可以检索它,则可以获取ViewGroupusing的实例

yourFragment#getView().findViewById()

如果没有,您可以使用Activity接受 aViewGroup作为参数的方法创建一个您实现的接口。然后在 Fragment 中onCreateView(),让 Fragment 将ViewGroupoff 传递给接口。您可以直接投射到您的Activity,但界面更干净。

例如

public class Fragment {

 public interface ViewGroupCreateListener{

     public void onViewGroupCreated (ViewGroup v);
 }

 private ViewGroupCreateListener listener;

 public void onAttach (Activity a){
     super.onAttach (a);
     listener = (ViewGroupCreateListener) a;
 }

public View onCreateView (/*all its arguments here*/){
    View v = inflater.inflate (R.layout.your_layout);
    ViewGroup group = v.findViewById (R.id.container);
    listener.onViewGroupCreated(group);

    return v;
 }

}

Activity会看起来像:

public class MainActivity extends Activity implements ViewGroupCreateListener, OtherInterface1, OtherInterface2{

  private ViewGroup mViewGroup;


  public void onViewGroupCreated (ViewGroup v){
     mViewGroup = v;
  }
}

这很好,因为如果寻呼机重新实例化Fragment, Activity 仍然会获得ViewGroup.

或者,如果取决于您实际尝试使用 this 实现的目标ViewGroup,您也许可以在其内部进行此处理Fragment

于 2013-08-07T00:56:06.393 回答