P
Panikmeister
Neues Mitglied
- 0
Hallo Leute,
ich habe da ein kleines Problem.
Meine MainActivity steuert mit einem ViewPager 3 Fragments(kombiniert mit nem TabAdapter).
Diese Fragments enthalten jeweils ListViews, welche mit einem ArrayAdapter befüllt werden.
Bsp: Fragment1 : Einkaufslistenübersicht.
Nun muss bei einem Klick auf Einkaufsliste XY ein neues Fragment geöffnet werden, welches die in der Einkaufsliste enthaltenen Artikel anzeigt.
Wie soll ich dieses Fragment erstellen?
Callbacks zur MainActivity sind schon erstellt und funktionieren auch.
Der Viewpager selber steuert ja nur die 3 "Hauptfragments"...
UND: Wie kann kann ich das aktuell angezeigte Fragment herausfinden? Über den Fragmentmanager, nehme ich an..aber welche Methode?
Wäre super, wenn Ihr mir weiterhelfen könntet.
Viele Grüße,
Jan
Anbei das Layout.
Und hier Code-Snippets:
MainActivity:
Fragment 1:
Adapter für Fragment 1:
ich habe da ein kleines Problem.
Meine MainActivity steuert mit einem ViewPager 3 Fragments(kombiniert mit nem TabAdapter).
Diese Fragments enthalten jeweils ListViews, welche mit einem ArrayAdapter befüllt werden.
Bsp: Fragment1 : Einkaufslistenübersicht.
Nun muss bei einem Klick auf Einkaufsliste XY ein neues Fragment geöffnet werden, welches die in der Einkaufsliste enthaltenen Artikel anzeigt.
Wie soll ich dieses Fragment erstellen?
Callbacks zur MainActivity sind schon erstellt und funktionieren auch.
Der Viewpager selber steuert ja nur die 3 "Hauptfragments"...
UND: Wie kann kann ich das aktuell angezeigte Fragment herausfinden? Über den Fragmentmanager, nehme ich an..aber welche Methode?
Wäre super, wenn Ihr mir weiterhelfen könntet.
Viele Grüße,
Jan
Anbei das Layout.
Und hier Code-Snippets:
MainActivity:
Code:
public class Main extends FragmentActivity implements ListeOverviewAdapter.OnListeSelectedListener,
RezeptOverviewAdapter.OnRezeptSelectedListener, VorratOverviewAdapter.OnVorratSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
final ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
pager.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
getActionBar().setSelectedNavigationItem(position);
}
});
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
pager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
};
actionBar.addTab(actionBar.newTab().setText("Einkaufslisten").setTabListener(tabListener));
actionBar.addTab(actionBar.newTab().setText("Rezepte").setTabListener(tabListener));
actionBar.addTab(actionBar.newTab().setText("Vorrat").setTabListener(tabListener));
}
Code:
// Callbacks der Fragmente
// EK-Liste. (Fragment 1)
@Override
public void onListeSelected(int message, int position) {
switch(message) {
case Global.MSG_SELECT:
Toast.makeText(this, "SELECT Liste" + position, Toast.LENGTH_SHORT).show();
break;
case Global.MSG_EDIT:
Toast.makeText(this, "EDIT Liste" + position, Toast.LENGTH_SHORT).show();
}
}
Code:
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public android.support.v4.app.Fragment getItem(int pos) {
switch(pos) {
// Neues Fragment erstellen und Tag geben.
// Fragment fragment = getFragmentManager().findFragmentByTag("yourstringtag");
case 0: return ListeOverviewFragment.newInstance("ListeOverviewFragment");
case 1: return RezeptOverviewFragment.newInstance("RezeptOverviewFragment");
case 2: return VorratOverviewFragment.newInstance("VorratOverviewFragment");
default: return ListeOverviewFragment.newInstance("ListeOverviewFragment");
}
}
@Override
public int getCount() {
return 3;
}
}
Code:
public class ListeOverviewFragment extends Fragment {
private Context context;
private Datasource datasource;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.listeoverview_fragment, container, false);
this.context = getActivity();
this.datasource = new Datasource(getActivity());
ListView lv = (ListView) v.findViewById(R.id.listeOverview_listView);
lv.setAdapter(new ListeOverviewAdapter(context, this.datasource.getListeOverviewData()));
return v;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
public static ListeOverviewFragment newInstance(String text) {
ListeOverviewFragment f = new ListeOverviewFragment();
Bundle b = new Bundle();
b.putString("TAG", text);
f.setArguments(b);
return f;
}
}
Code:
public class ListeOverviewAdapter extends ArrayAdapter<ListeOverviewModel> {
Context context;
List<ListeOverviewModel> data;
OnListeSelectedListener mListener;
public ListeOverviewAdapter(Context con, List<ListeOverviewModel> objects) {
super(con, R.layout.listeoverview_adapter , objects);
this.context = con;
this.data = objects;
try {
mListener = (OnListeSelectedListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement OnArticleSelectedListener");
}
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// Get the data item for this position
ListeOverviewModel ekListe = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.listeoverview_adapter, parent, false);
viewHolder.tvName = (TextView) convertView.findViewById(R.id.listeOverview_tvName);
viewHolder.tvProgress = (TextView) convertView.findViewById(R.id.listeOverview_tvProgress);
viewHolder.btEdit = (Button) convertView.findViewById(R.id.listeOverview_btEdit);
viewHolder.tvSubtitle = (TextView) convertView.findViewById(R.id.listeOverview_tvSubtitle);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tvName.setText(ekListe.getName());
viewHolder.tvProgress.setText(ekListe.getProgress());
viewHolder.tvSubtitle.setText(ekListe.getKategorie());
viewHolder.tvName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onListeSelected(Global.MSG_SELECT, position);
}
});
viewHolder.btEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mListener.onListeSelected(Global.MSG_EDIT, position);
}
});
// Return the completed view to render on screen
return convertView;
}
public interface OnListeSelectedListener {
public void onListeSelected(int message, int position);
}
private static class ViewHolder {
TextView tvName;
TextView tvProgress;
TextView tvSubtitle;
Button btEdit;
}
}