当前位置: 首页 > 知识库问答 >
问题:

如何在fragment的父Activity中访问Fragment的子视图?

太叔京
2023-03-14

我有一个受支持的片段活动,它将加载差异片段。片段有一些文本视图,带有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    
    }

}

共有3个答案

唐裕
2023-03-14

您无需引用片段视图即可在活动中获取其组件。因为您可以直接访问父活动中片段的布局组件。

简单地说,您可以通过以下方式访问任何组件:

findViewById(R.id.child_of_fragment_layout);  
太叔豪
2023-03-14
匿名用户

可以通过以下方式进行:

像这样在片段中保留膨胀视图的引用:

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

鲜于岳
2023-03-14

在片段之外直接访问片段的视图不是一个好主意。您应该使用片段回调接口来处理此类情况并避免错误。以下方法有效,但不推荐使用,因为它不是一个好做法。

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中创建一个自定义界面: 在您的活动中实现此接口: 现在,您必须重写声明的方法(在中): 然