【发布时间】:2017-02-01 08:03:45
【问题描述】:
我有这个片段:
class FooFragment extends Fragment {
FooListener mListener;
interface OnFooListener {
void onFoo();
}
class FooListener implements View.OnClickListener {
void onClick(View view) {
mListener.onFoo();
}
}
void onAttach(Context context) {
Assert.assertTrue(context instanceof OnFooListener);
super.onAttach(context);
mListener = (OnFooListener) context;
}
void onCreateView(...) {
...
button.setOnClickListener(new ClickListener());
}
}
FooFragment 期望 Context 是 OnFooListener 的一个实例,并且 onClick 事件使用这种机制传播到 Activity(在我的例子中),即上下文。
“拥有”片段的 Activity 是 FooFragment 的上下文,因为我在我的 Activity 布局中声明了<fragment>(这就是我的理解)。
现在,我想把这个片段放在滑动视图中,我在this guide 之后实现了它。一个类继承自一个Activity内部的FragmentPagerAdapter,负责处理片段,例如:
class TabsActivity extends AppCompatActivity {
void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_main);
ViewPager pager = (ViewPager) findViewById(R.id.pager);
LocalAdapter adapter = new LocalAdapter(getSupportFragmentAdapter());
pager.setAdapter(adapter);
}
class LocalAdapter extends FragmentPagerSupport {
static LAYOUTS[] = {
new DebugFragment()
};
int getCount() {
return LAYOUTS.length;
}
Fragment getItem(int position) {
return LAYOUTS[position];
}
}
}
如何将FooFragment 放入此类中,以便将事件传播到 TabsActivity?在这种情况下,我不明白我的片段的上下文是什么。
我可以放置一个 setter,但这意味着我需要在 LocalAdapter 中对这个特定的类进行特定处理,这似乎很麻烦,因为我需要片段和父 Activity 之间的交互。
谢谢,
【问题讨论】:
标签: android android-fragments android-activity