我有一个受支持的片段活动,它将加载差异片段。片段有一些文本视图
,带有id=“score”
我想得到它的句柄,但score的的
findViewById
返回null。为什么会这样?
textView被放置在片段中
public class MyActivity extends extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks{
private TextView scoreBoardTextView = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
scoreBoardTextView = (TextView) findViewById(R.id.score); //this returns null
}
@Override
public void onNavigationDrawerItemSelected(int position) {
//set fragment
}
}
您无需引用片段视图即可在活动中获取其组件。因为您可以直接访问父活动中片段的布局组件。
简单地说,您可以通过以下方式访问任何组件:
findViewById(R.id.child_of_fragment_layout);
匿名用户
可以通过以下方式进行:
像这样在片段中保留膨胀视图的引用:
public class MyFragment extends SherlockFragment{
MainMenuActivity activity;
public View view;
public MyFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if ( getActivity() instanceof MainMenuActivity){
activity = (MainMenuActivity) getActivity();
}
view = inflater.inflate(R.layout.aboutus, container, false);
return view;
}
}
在活动中创建一个函数,如下所示:
public class MainMenuActivity extends SherlockFragmentActivity {
SherlockFragment fragment = null;
public void switchContent(SherlockFragment fragment) {
this.fragment = fragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.mainmenu, fragment)
.commit();
invalidateOptionsMenu();
}
它的目的是保留当前片段的引用。每当您想切换片段时,您都可以调用上面的函数,如下所示(来自片段):
activity.switchContent( new MyFragment_2());
现在你有了当前的片段引用。因此,您可以像这样直接访问Activity中片段的视图:< code>this.fragment.view
在片段之外直接访问片段的视图不是一个好主意。您应该使用片段回调接口来处理此类情况并避免错误。以下方法有效,但不推荐使用,因为它不是一个好做法。
public class MyFragment extends Fragment {
TextView mTextView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main, container, false);
mTextView = (TextView) view.findViewById(R.id.textView1);
return view;
}
public void setTextViewText(String value){
mTextView.setText(value);
}
}
现在您可以在您的活动
中使用它,如下所示:
myFragment.setTextViewText("foo");
这里,myFragment的类型为myfragmet
。
如果要访问整个文本视图
,则可以在MyFragment.java
中定义如下方法:
public TextView getTextView1(){
return mTextView;
}
通过这种方式,您可以访问TextView
本身。
希望这有帮助。:)
本文向大家介绍Android 中Fragment与Activity通讯的详解,包括了Android 中Fragment与Activity通讯的详解的使用技巧和注意事项,需要的朋友参考一下 Android 中Fragment与Activity通讯的详解 与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一
本文向大家介绍Android开发 Activity和Fragment详解,包括了Android开发 Activity和Fragment详解的使用技巧和注意事项,需要的朋友参考一下 1.Activity的生命周期 1)多个Activity组成Activity栈,当前活动位于栈顶。我们先来看看各种Activity基类的类图: 当Activity类定义出来之后,这个Activity何时被实例化、它所包含
Fragment 组件提供了用于减少不必要嵌套的组件。组件能够在不额外创建 DOM 元素的情况下,在 render() 方法中返回多个元素。更早的 Rax 版本已经对数组的返回进行了支持,Rax 1.0 采用了更为标准的方式。 示例 <Fragment> <header>A heading</header> <footer>A footer</footer> </Fragment> //
问题内容: 我有主片段,我想传递给类,在这里我将在ListView中显示结果。 片段类: 我有资料 现在,我想将“ allStudents”对象发送到新的活动类StudentResult();中。 我在片段类中使用: 在目标类中显示ListView()中的对象; 提前致谢! 问题答案: 在您的Fragment中创建一个自定义界面: 在您的活动中实现此接口: 现在,您必须重写声明的方法(在中): 然