Ho un ViewPager
e utilizza uno FragmentAdapter
per visualizzare diversi frammenti dello stesso tipo. Sebbene questi frammenti siano fondamentalmente istanziati dalla stessa classe, stanno utilizzando un ListView
per visualizzare informazioni diverse. (Ovviamente lo ListView
è in fase di caricamento da ArrayAdapter
.)
Un servizio in background è in esecuzione e riceve costantemente dati da Internet. Desidero poter aggiornare un frammento specifico nello ViewPager
quando il mio servizio in background mi ha informato di un evento specifico.
Come posso farlo? Uno snippet di codice sarebbe molto apprezzato!Attività ViewPager per notificare un frammento di un evento specifico
(A proposito, ho sega this similar question ma non ho idea di come usare il loro suggerimento!)
Per rendere il tutto più semplice: La mia attività con la ViewPager:
[Frammento 0] [Frammento 1] [Frammento 2]
il servizio in background mi dice (tramite una trasmissione) per aggiornare il ListView
in Frammento 1.
EDIT: Qui ci sono codici di esempio:
public class ChatWindowPager extends FragmentActivity
{
private ViewPager mViewPager = null;
private ChatFragmentAdapter mAdapter = null;
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_window_pager);
this.mViewPager = (ViewPager) findViewById(R.id.chatPager);
this.mAdapter = new ChatFragmentAdapter(getSupportFragmentManager());
this.mViewPager.setAdapter(this.mAdapter);
.
.
.
}
class ChatFragmentAdapter extends FragmentPagerAdapter implements ViewProvider
{
public ChatFragmentAdapter(final FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(final int arg0)
{
String friendId = ..... // Some initializations
ChatWindowFragment f = ChatWindowFragment.newInstance(friendId);
return f;
}
@Override
public int getCount()
{
...
}
@Override
public View getView(final int position)
{
View v = getLayoutInflater().inflate(R.layout.tab_holder, null);
.
.
.
return v;
}
}
}
Ora i frammenti è definita in questo modo:
public class ChatWindowFragment extends Fragment
{
public String friendId;
private ListView lv;
public static ChatWindowFragment newInstance(final String friendId)
{
ChatWindowFragment chatWindowFragment = new ChatWindowFragment();
Bundle bundle = new Bundle();
bundle.putString("friendId", friendId);
chatWindowFragment.setArguments(bundle);
return chatWindowFragment;
}
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.friendId = getArguments().getString("friendId");
}
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.chat_window, container, false);
this.friendId = getArguments().getString("friendId");
.
.
.
return v;
}
//The rest of the class
}
Come sto usando un FragmentPagerAdapter
non vedo come posso imposta il tag di ogni frammento! (Ovviamente, non sto usando le operazioni per aggiungere i Frammenti!)
EDIT 2: Vorrei sapere se quello che sto facendo, è il modo corretto di gestire quello che voglio fare .. Qualsiasi altra soluzione è anche benvenuta!
hai provato quello che ho suggerito .... –