#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); но это все равно не сработало