我有Fragment
,是ViewPager
的一部分。在这个Fragment
我有一个ViewGroup
孩子。现在,为什么在我MainActivity
onCreate()
ViewPager
实例化我的adapter
和Container
之后,我的null
正在获得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
以下ViewPager
是mContainerView
的一部分,其中包含<?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>
{{1}}
答案 0 :(得分:1)
如果我正确地阅读了您的问题,您正试图使用Fragment
的{{1}}方法访问View
的{{1}}(和孩子) 。这应该不起作用,因为Activity
夸大了自己的布局,而findViewById()
不是传统的Fragment
。
如果您知道Fragments
已实例化并且您可以检索它,则可以使用
Views
的实例
Fragment
如果没有,您可以使用接受ViewGroup
作为参数的方法创建yourFragment#getView().findViewById()
实现的接口。然后在Fragment的Activity
中,让Fragment将ViewGroup
传递给接口。您可以直接投射到onCreateView()
,但界面更清晰。
例如
ViewGroup
}
您的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
实际尝试实现的目标,您可以在ViewGroup
内部进行此处理。