Отправка переменной из фрагмента в MainActivity - PullRequest
0 голосов
/ 06 июня 2018

В моем приложении у меня есть три фрагмента.В третьем фрагменте переменная взята из seekBar.Теперь я хочу использовать эту переменную в моей MainActivity.Я попытался отправить переменную с намерением и показать ее в textView onClick для проверки, но textView показывает только «ноль».Почему переменная не отправляется в действие?

My MainActivity:

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

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Проблемы:

В вашей деятельности Intent intent = getIntent(); получит намерение, которое запускает MainActivity.

В onProgressChanged вашего фрагмента ваш код вообще не взаимодействует с MainActivity.

Сейчас я могу представить себе два относительно простых решения:

  1. Вызов функции MainActivity с использованием ((MainActivity) getActivity()).someFunction() в вашем фрагменте.

  2. В MainActivity используйте ((YourFragment) getSupportFragmentManager().findFragmentById(R.id.your_fragment_id)).property для доступа к содержимому фрагмента объекта.Вы можете поместить значение строки поиска в переменную класса.

И проверить это: Связь между фрагментом и действием - лучшие практики

0 голосов
/ 06 июня 2018

getActivity () findViewById (R.id.textView3) .setText ( "" + значение).поместите код внутри onProgressChanged (), надеюсь, он вам поможет.

0 голосов
/ 06 июня 2018

Я думаю, что вы пропустили startActivity(intent).

 Intent intent = new Intent(getActivity().getBaseContext(),
                        MainActivity.class);
                intent.putExtra("message", value);
                 getActivity().startActivity(intent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...