Я довольно новичок в Android (3 дня), но у меня довольно хороший фон в PHP (что может быть причиной моей путаницы в среде Java). Я начал создавать Android-приложение с помощью Android Studio (бета-версия). Я создал активность Android Studio по умолчанию с помощью Activity Navigation Drawer. Я редактировал фрагмент активности части, чтобы выглядеть следующим образом:Обновление списка фрагментов из активности
@Override
public void onNavigationDrawerItemSelected(int position) {
Bundle bundle = new Bundle();
bundle.putStringArrayList("contacts", arr);
bundle.putStringArrayList("messages", messages);
Fragment fragment = null;
switch (position) {
case 0:
fragment = new FriendsFragment();
break;
case 1:
fragment = new ChatsFragment();
break;
case 2:
fragment = new GroupsFragment();
break;
case 3:
fragment = new LogoutFragment();
break;
default:
break;
}
if (fragment != null) {
fragment.setArguments(bundle);
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment).addToBackStack(null).commit();
}
}
Как вы можете видеть, Я передаю Bundle моих фрагментов называемых «сообщениями» и «контактами», когда элемент выбран в панели навигации. Пакет «Сообщения» - это сообщения XMPP, полученные библиотекой aSmack с сервера OpenFire. Так что в основном я пытаюсь создать клиент XMPP. Когда я запускаю приложение, я могу получать сообщения в «ChatsFragment».
Теперь моя проблема: я должен нажать «ChatsFragment» пункт на ящик, чтобы мои сообщения обновляются (повторно получить расслоение) каждый раз я чувствую, что есть новые сообщения, полученные от сервера. Но я хочу, чтобы это было сделано автоматически фрагментом.
Прежде всего я хотел бы знать, если моя процедура является правильной (Activity прослушивает сервер создает пакет, отправить пакет фрагмент, расслоение обновлений сообщений на получении **)
** = Эта часть у меня есть не были в состоянии понять, как реализовать.
1- Если процедура верна, скажите мне, как я должен получать сообщения, которые будут обновляться фрагментом через активность?
2 Если это не правильный способ сделать что-то в Android, рекомендую мне способ сделать это.
Мой код для отображения сообщений в фрагменте:
private void displayListView() {
// Messages array list
List<String> contacts = getArguments().getStringArrayList("messages");
//System.out.println("arr: " + contacts);
//create an ArrayAdaptar from the String Array
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.url_list, contacts);
ListView listView = (ListView) getView().findViewById(R.id.listView);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
//enables filtering for the contents of the given ListView
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// Send the URL to the host activity
//mListener.onURLSelected(((TextView) view).getText().toString());
}
});
}
Спасибо заранее.
После того, как я реализую этот подход к дизайну, и пакет создается при приеме сообщений, как я могу уведомить об этом Фрагмент, чтобы обновить себя, когда фрагмент отображается (активен), а когда нет? –
Ваша трансляция будет приниматься объектом BroadcastReceiver в активности, которая содержит фрагмент. Если ваш фрагмент активен, вы можете напрямую передать объект Bundle. Если это не так, вы можете иметь что-то вроде установленного флага, чтобы фрагмент знал, что его нужно обновить при следующем запуске. – ucsunil