java - 使用带有 Activity 的按钮从 fragment 获取数据

标签 java android android-fragments

我需要从 Activity 中的 Fragment 获取数据(一些字符串)(使用 ViewPager)。我在这个 fragment 中创建了方法:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    v = inflater.inflate(R.layout.fragment_fragment_intro_activity_2, container, false);
    ed_operetka = v.findViewById(R.id.edOperetka);
    return v;
}
public String getText2(){
    return ed_operetka.getText().toString();
}

我在 Activity 中调用了它:

  @Override
            public void onClick(View v) {
                if (viewPager.getCurrentItem()==0) {
                viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
                    showingFirst = false;
            }else {startActivity(intent);
            String z = frag.getText2();  //line 44
                    Toast.makeText(IntroActivity.this, "" + z, Toast.LENGTH_SHORT).show();
                }
            }
        }); 

但它引发了我一个错误:

W/RenderThread: type=1400 audit(0.0:3989185): avc: denied { read } for name="u:object_r:vendor_default_prop:s0" dev="tmpfs" ino=14894 scontext=u:r:untrusted_app:s0:c114,c256,c512,c768 tcontext=u:object_r:vendor_default_prop:s0 tclass=file permissive=0
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.wynagrodzeniedodatkowe, PID: 26732
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.wynagrodzeniedodatkowe.fragments.fragment_intro_activity_2.getText2()' on a null object reference
        at com.example.wynagrodzeniedodatkowe.IntroActivity$1.onClick(IntroActivity.java:44)

我阅读了有关界面的内容,我知道当按钮是 fragment 的一部分时如何使用它们。但如果不是的话我就不知道了。你可以帮帮我吗?或者给出好的接口(interface)教程。

编辑

 ViewPager viewPager;
    Button button_next;
    boolean showingFirst;
    fragment_intro_activity_2 frag;
    String z;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intro);

        FullScreencall();

        button_next = findViewById(R.id.btnNext);
        viewPager = findViewById(R.id.viewPager);
        viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
        frag = new fragment_intro_activity_2();

        showingFirst = true;
        button_next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (viewPager.getCurrentItem()==0) {
                    viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
                    showingFirst = false;
                }else {
                    z = frag.getText2();  //line 44
                    Toast.makeText(IntroActivity.this, "" + z, Toast.LENGTH_SHORT).show();
                }
            }
        });

最佳答案

好吧,据我了解,您需要访问父 Activity 中 Fragment 的成员(textview)。

现在,以下代码的问题:

frag = new fragment_intro_activity_2();

是,这只会创建 fragment 类的实例,但不会填充 View 等。因此,很明显,当尝试访问该 fragment 的任何 View 时,您会得到空指针。仅当通过正常流程启动 fragment 时才会填充 View 。

因此,要解决您的问题,您有两种选择。

1) 当你的fragment在添加到viewpager时调用oncreate时,你可以通过接口(interface)将该textview的文本值传递给父activity,然后在activity中使用它。基本上,创建一个像这样的链接:FRAGMENT-> INTERFACE(文本值)--> ACTIVITY

2)有一种方法可以访问 View 页面的特定 fragment (该 fragment 已被填充等),然后您可以在 fragment 类中使用公共(public)方法来访问文本(就像在原始代码中一样)。对于此选项,请检查此链接:Getting the current Fragment instance in the viewpager

关于java - 使用带有 Activity 的按钮从 fragment 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56751869/

相关文章:

android-fragments - 在 Fragment 中启动 Activity

java - Android 线程上的 fragment 替换(...)

android - 使用卡片 View 在回收器 View 中加载文本太慢

java - 代码在抛出 NullPointerException 时仅返回 0.0, 0.0 GPS 坐标

android - 在 Activity 或 fragment 中初始化房间数据库?

Java Swing : How do I define one minimal dimension (of the two) for components?

android - 如何构建 Trade Federation 测试用例

java - 我如何在触摸时启动动画,该动画将在到达 Sprite 表末尾后停止?

java - 匹配出现次数最多的字符串

java - 读取rs232时随机换行