Как отправить данные из списка в виде одного фрагмента в другой - PullRequest
2 голосов
/ 15 июня 2019

У меня есть пара элементов списка, и мне нужно, когда я нажимаю на конкретный список, чтобы перейти к Fragment_2 со значением щелчка, которое выбрано. Я пытаюсь использовать приведенный ниже код для Fragment_1. Я получаю правильное значение, которое оно показывает в уведомлении Tosat, но в пакете Fragment_2 всегда значение NULL.

В методе onCreate во Fragment_1

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                String value = ((TextView) view.findViewById(R.id.username)).getText().toString();
                MainFragment fragment = new MainFragment ();
                Bundle bundle = new Bundle();
                bundle.putString("view", value);
                Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show();
                fragment.setArguments(bundle);

В методе onCreate во Fragment_2

 Bundle bundle = this.getArguments();
        if (bundle != null) {
            String myString = bundle.getString("view");
            Toast.makeText(getContext(), myString, Toast.LENGTH_SHORT).show();

UDPATE

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                String value = ((TextView) view.findViewById(R.id.username)).getText().toString();
                MainFragment fragment = new MainFragment ();
                Bundle bundle = new Bundle();
                bundle.putString("view", value);
                Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show();
                fragment.setArguments(bundle);

                if (position == 0) {
                    Intent myIntent = new Intent(view.getContext(), MainActivity.class);
                    startActivityForResult(myIntent, 0);

                }

                if (position == 1) {
                    Intent myIntent = new Intent(view.getContext(), MainActivity.class);
                    startActivityForResult(myIntent, 0);
                }

                if (position == 2) {
                    Intent myIntent = new Intent(view.getContext(), MainActivity.class);
                    startActivityForResult(myIntent, 0);
                }

                if (position == 3) {
                    Intent myIntent = new Intent(view.getContext(), MainActivity.class);
                    startActivityForResult(myIntent, 0);
                }

                            // ETC .......
            }
        });

Ответы [ 4 ]

2 голосов
/ 15 июня 2019

Просто замените приведенный ниже код в методе onItemClick.

            String value = ((TextView) 
            view.findViewById(R.id.username)).getText().toString();
            Bundle bundle = new Bundle();
            bundle.putString("view", value);
            Intent myIntent = new Intent(view.getContext(), MainActivity.class);
            myIntent.putExtra(bundle);
            startActivityForResult(myIntent, 0);

На MainActivity замените свой MainFragment следующим образом,

            MainFragment fragment = new MainFragment ();
            fragment.setArguments(getIntent().getExtras());

            getSupportFragmentManager()
              .beginTransaction()
              .replace("your fragment container id here", fragment)
              .commit();
1 голос
/ 15 июня 2019

Вы не делаете фрагмент

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                String value = ((TextView) view.findViewById(R.id.username)).getText().toString();
                MainFragment fragment = new MainFragment ();
                Bundle bundle = new Bundle();
                bundle.putString("view", value);
                Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show();
                fragment.setArguments(bundle);

// This line is important
getSupportFragmentManager().beginTransaction().add(R.id.container, fragment).commit();

0 голосов
/ 15 июня 2019

Вы называете действие так, как вы можете получить данные во фрагменте, и если вы делаете это так:

Сначала вы запускаете действие этим

  Intent myIntent = new Intent(view.getContext(), MainActivity.class);
                startActivityForResult(myIntent, 0);

Затем вВ этом упражнении вы запускаете фрагмент

getFragmentManager().beginTransaction().replace("your fragment container id here", 
fragment).commit();

Затем в этом случае сначала передайте данные в намерение, как это

  Intent myIntent = new Intent(view.getContext(), MainActivity.class);
     myIntent.putString("data","Put the data which you want to pass");
                startActivityForResult(myIntent, 0);

, и передайте эти данные во фрагмент с помощью связок.будет работать на вас.

0 голосов
/ 15 июня 2019

Вы запускаете действие "MainActivity.class" и передаете свой пакет в класс фрагмента "MainFragment", но фактически не запускаете MainFragment.Итак, очевидно, что ваш код не будет работать

...