将片段中的变量发送到MainActivity

时间:2018-06-06 10:50:42

标签: java android android-fragments

在我的应用程序中,我有三个片段。在第三个片段中,变量来自seekBar。现在我想在MainActivity中使用这个变量。我尝试发送带有intent的变量并在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));
            }
        });
    }
}

发送变量的My Fragment:

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;
    }
}

3 个答案:

答案 0 :(得分:2)

问题是

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

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

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

  1. 使用片段中的((MainActivity) getActivity()).someFunction()调用MainActivity函数。

  2. 在MainActivity中,使用((YourFragment) getSupportFragmentManager().findFragmentById(R.id.your_fragment_id)).property访问片段对象的内容。您可以将搜索栏值放入类变量中。

  3. 并检查一下:Communicating between a fragment and an activity - best practices

答案 1 :(得分:0)

getActivity()findViewById(R.id.textView3).setText("&#34 +值); 将代码放在onProgressChanged()中,希望对你有帮助。

答案 2 :(得分:-1)

我认为你错过了startActivity(intent)

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