当前位置: 首页 > 面试题库 >

Android-如何管理具有不同内容的单个片段的多个实例?

邹祺然
2023-03-14
问题内容

我希望能够设置各个片段视图的setText和getText。就像现在一样,当我使用Framgent的TextView的setText时,它会在所有片段中更改该View的文本。

我一直在尝试着四处移动,但是到现在为止,这是我的代码

片段类

public class TestFragment extends Fragment{

    View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.test_fragment, container, false);
        TextView tv = (TextView) view.findViewById(R.id.huh);
        //tv.setText("AAAAAAAAAAAAAAAAAAA");

        return view;
    }

    public void setText(String asdf) {
        TextView test = (TextView) view.findViewById(R.id.huh);
        test.setText(asdf);
    }


}

活动课

    public class Manage extends BaseActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.manage);

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        TestFragment fragment = new TestFragment();
        //fragment.setText("ASDF");
        fragmentTransaction.add(R.id.test_fragment, fragment, "testtag");
        fragmentTransaction.commit();
    }
}

framgent.xml很简单;只是一个TextView。


问题答案:

使用名为tag的参数将片段添加到堆栈中。在您的情况下,您已将片段添加为“ testtag”。

fragmentTransaction.add(R.id.test_fragment, fragment, "testtag");

如果您创建相同片段的多个实例并为它们添加唯一标签,则可以使用该唯一标签获取它们。当您得到一个片段时,您就可以达到其内容。

FragmentManager fm = this.getSupportFragmentManager();
Fragment testtagFragment = fm.findFragmentByTag("testtag"); 
View targetView = testtagFragment.getView().findViewById(R.id.anyViewInsideContentOfYourFragment);

编辑:

我希望能够设置各个片段视图的setText和getText。

这个问题分为两部分。

  1. 要在初始化时使用setText,则必须在创建其实例时将初始参数传递给片段。我建议您为此使用静态newInstance方法。在这里查看示例
  2. 要获取文本,请阅读上面的答案。请注意,您可以在onCreateView执行片段方法后获取片段的内容。因此,如果您尝试在活动的onCreate方法上调用片段的getView方法(添加片段之后),则它将返回null。您可以在click事件下成功获取其内容以对其进行测试,然后对该片段的内容使用任何视图的get或set操作。


 类似资料:
  • 我有一个使用本教程创建的抽屉和滑动选项卡的项目。我正在使用支持库使材料设计可用于较老的android版本。我还使用了而不是。我有一个连接到工具栏菜单: 我已经找了好几个星期了,为了有效果。我做错什么了吗? 我如何才能有每个片段的特定菜单?我认为隐藏菜单项可能是更容易实现的选择,但如果你们有任何其他方法来实现,我将不胜感激。

  • 我有一个用例,我想我需要两个实体管理器,它们访问相同的持久性单元。所以本质上,我希望在同一个数据库上有两个持久性上下文。这是否可以通过PersistenceContext注释实现? 我想写以下内容,但不知道如何告诉JPA注入两个不同的manager实例。 我想我可以切换到应用程序管理的事务,然后我可以使用工厂创建另一个事务。但是我不想自己管理事务,如果不是绝对必要的话。

  • 当我启动一个实现viewpager的活动时,viewpager创建了各种片段。我想为每个片段使用不同的布局,但问题是viewpager最大只显示两个布局(在1之后的所有剩余片段上显示第二个布局)。 下面是实现viewpager的SwipeActivity的代码: 这是片段的代码

  • 如何生成多个页面的pdf报告,每个页面上的内容相同。以下是单页报告的代码。多个页面应位于单个pdf文件中。

  • 我是个新手,在尝试触发onClick事件时遇到了问题。我让事件工作,当它被点击时,div出现并重新出现。问题是,如果我按下某个特定项目的按钮,所有div都会出现,而不是我刚才单击按钮的div。如何使我单击的按钮仅在该特定元素上启动。 这是我的代码: 类应用程序扩展了React.Component{