Использование пакета для обновления textview с одного фрагмента на другой фрагмент не работает

#android #android-fragments #android-fragmentactivity

#Android #android-фрагменты #android-fragmentactivity

Вопрос:

Я следовал примерам кода по использованию пакета для отправки данных из одного фрагмента в другой фрагмент, но мой textview, где я хочу отобразить значение пакета, содержащее строку, не показывает сохраненное значение.

Строковое значение — это получение телефонного имени contact, на которое пользователь нажал в listview, что в строке toast ниже показывает, что имя успешно выбрано.

Я переписал код для отправки строкового значения фрагменту несколько раз, следуя примерам, но мне не повезло.

SelectModemFragment

  // Set the ListViews OnItemClick Listener
            display_contacts1.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id)
                {
                    String namedisplay = arrayAdapter.getItem(position); //<<<<<<<<<< this gets the phone name

                    Toast.makeText(view.getContext(), namedisplay   " Selected for Communication", Toast.LENGTH_SHORT).show();
                    Toast.makeText(view.getContext(), phoneNo, Toast.LENGTH_SHORT).show();

                    // Using bundle to send data
                    Bundle bundle = new Bundle();
                    bundle.putString(namedisplay, "namevalue");

                    // Begin transaction to command window
                    FragmentTransaction transaction = getFragmentManager().beginTransaction();
                    CommandsFragment modemFragment = new CommandsFragment();
                    modemFragment.setArguments(bundle); // Data to be send to commands fragment
                    transaction.replace(R.id.frame_layout, modemFragment);
                    transaction.commit();

                    //modemView.setText(namedisplay);
                }
            });
  

CommandsFragment

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.fragment_commands_view, container, false);

        modemView = (TextView) view.findViewById(R.id.modem_view);

        if (display_contacts.isEmpty())
        {
            number = null;

            // No contacts selected from the Add Modem listview
            modemView.setText("No contact selected");
        }
        else
        {
            Bundle bundle = getArguments();
            modemView.setText(String.valueOf(bundle.getString("namevalue")));
        }

        return view;
}
  

Комментарии:

1. Попробуйте это bundle.putString("namevalue",namedisplay);

2. Измените это bundle.getString("namevalue") на bundle.getString(namedisplay) . namedisplay — должно быть фактическое имя ключа.

Ответ №1:

эта строка — ваша проблема:

 bundle.putString(namedisplay, "namevalue");
  

это должно быть

 bundle.putString("namevalue", namedisplay);
  

сначала введите ключ, затем значение.

Комментарии:

1. Но все остальные строки в порядке?

2. судя по тому, что вы вставили, это так. Пакет представляет собой карту и работает как карта — вы сохраняете значения на основе ключа. Вы всегда должны ставить ключ первым, а значение вторым. Ваш код показывает, что вы вводите значение в качестве ключа, и именно поэтому, когда вы ищете на карте ‘namevalue’, он не возвращает строку, поскольку в map такого ключа нет

3. Я выполнил обновление, в котором я изменил строку на bundle.putString («namevalue», namedisplay); но это все равно не сработало