Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将变量从片段发送到MainActivity_Java_Android_Android Fragments - Fatal编程技术网

Java 将变量从片段发送到MainActivity

Java 将变量从片段发送到MainActivity,java,android,android-fragments,Java,Android,Android Fragments,在我的应用程序中,我有三个片段。在第三个片段中,一个变量取自seekBar。现在我想在MainActivity中使用这个变量。我试图发送一个带有意图的变量,并在textView onClick中显示它来测试它,但是textView只显示“null”。为什么变量没有发送到活动 我的主要活动: public class MainActivity extends AppCompatActivity { TextView textTest; public int a = 33;

在我的应用程序中,我有三个片段。在第三个片段中,一个变量取自seekBar。现在我想在MainActivity中使用这个变量。我试图发送一个带有意图的变量,并在textView onClick中显示它来测试它,但是textView只显示“null”。为什么变量没有发送到活动

我的主要活动:

public class MainActivity extends AppCompatActivity {

    TextView textTest;
    public int a = 33;

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

        textTest = (TextView) findViewById(R.id.textView3);

        Button button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                Intent intent = getIntent();
                String messages = intent.getStringExtra("message");
                textTest.setText(String.valueOf(messages));
            }
        });
    }
}
发送变量的我的片段:

public class ItemThreeFragment extends Fragment {

    SeekBar seekBar;
    TextView textView11;
    int value = 10;

    public static ItemThreeFragment newInstance() {
        ItemThreeFragment fragment = new ItemThreeFragment();
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_item_three, container, false);

        seekBar = (SeekBar) view.findViewById(R.id.seekBar);
        seekBar.setMax(25);
        seekBar.setProgress(value);

        textView11 = (TextView) view.findViewById(R.id.textView11);
        textView11.setText("" + value);

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                value = i;
                textView11.setText("" + value);

                Intent intent = new Intent(getActivity().getBaseContext(),
                        MainActivity.class);
                intent.putExtra("message", value);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        }) 
        return view;
    }
}
我想你错过了startActivityintent

问题是

在您的活动中,Intent Intent=getIntent;将获得启动MainActivity的意图

在片段的onProgressChanged中,代码根本不与MainActivity通信

我现在可以想到两个相对简单的解决方案:

使用片段中的MainActivity getActivity.someFunction调用MainActivity函数

在Main活动中,使用YourFragment getSupportFragmentManager.findFragmentByIdR.id.your_fragment_id.property访问片段对象的内容。可以将搜索栏值放入类变量中


并选中此项:

getActivity.findViewByIdR.id.textView3.setText+value;
将代码放入onProgressChanged中,我希望它能对您有所帮助。

您可以使用接口与fragment到Activity进行通信的可能副本Op希望将数据从fragment共享到Activity,而不是启动Activity。好的,谢谢您。您能告诉我如何从fragment访问MainActivity中的静态变量吗?看起来it’像这样从MainActivity访问内容是个好主意,但是你知道片段id是什么吗?@MikeKng根据你发布的代码,它似乎是在布局XML中使用的。所以只需向它添加一个id。与向视图分配id相同。如果你以编程方式添加片段,你可以在添加期间添加一个标记,并在中使用findFragmentByTag相反,我是通过编程方式添加它们的,我在上面的代码中遗漏了该部分。我在创建片段时传递了一个标记并调用了它,但我的编译器无法解析…属性;。您是否有其他建议如何传递我的变量?@MikeKng尝试将属性替换为值,因为您将SeekBar的值放在value属性中。Make value publi如果编译器仍然无法解析。
 Intent intent = new Intent(getActivity().getBaseContext(),
                        MainActivity.class);
                intent.putExtra("message", value);
                 getActivity().startActivity(intent);