# ViewPager Problem



## Panikmeister (25. Aug 2014)

Hallöchen,

hab die Fragments nun geschmissen. In meiner MainActivity sind erstmal 3 Grund-Listviews vorhanden, der per Viewpager durchgegangen werden können.

Aus jedem dieser Listviews soll per Klick auf ein Item eine "Detailansicht" dieses Items angezeigt werden (auch als Listview). Nur bin ich mir da mit der Vorgehensweise nicht so ganz sicher...

Ich hätte 6 Listviews, diese aber alle in den Viewpager zu packen, geht nicht, da ich ja über die 3 Detailansichten nur über den ItemKlick zugreifen können soll.

Bei Klick auf ein Detail-Item nen Listener der MainActivity zu starten, der dann ein Listview in ... (wo rein eigentlich? In den Viewpager würde wohl Probleme geben.), ist wohl auch nicht das Gelbe vom Ei.

Der Projektname ist das Ergebnis meines heutigen Frustes :-(

Wäre super, wenn Ihr ein paar Tipps hättet..

Viele Grüße,

Jan



MyActivity

```
package jan.****teuch;

import android.content.Context;
import android.os.Parcelable;
import android.support.v7.app.ActionBarActivity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.util.List;
import java.util.Vector;

import jan.****teuch.Adapter.ListeOverviewAdapter;
import jan.****teuch.Adapter.RezeptOverviewAdapter;
import jan.****teuch.Adapter.VorratOverviewAdapter;
import jan.****teuch.Model.ListeOverviewModel;


public class MyActivity extends ActionBarActivity {

    private Context context;
    private Datasource datasource;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        context = this;
        this.datasource = new Datasource(this);

        ListView lvListeOverview = new ListView(context);
        ListView lvRezeptOverview = new ListView(context);
        ListView lvVorratOverview = new ListView(context);
        //ListView lvListe = new ListView(context);
        //ListView lvRezept = new ListView(context);
        //ListView lvVorrat = new ListView(context);

        lvListeOverview.setAdapter(new ListeOverviewAdapter(context, this.datasource.getListeOverviewData()));
        lvRezeptOverview.setAdapter(new RezeptOverviewAdapter(context, this.datasource.getRezeptOverviewData()));
        lvVorratOverview.setAdapter(new VorratOverviewAdapter(context, this.datasource.getVorratOverviewData()));

        Vector<View> pages = new Vector<View>();

        pages.add(lvListeOverview);
        pages.add(lvRezeptOverview);
        pages.add(lvVorratOverview);
        //pages.add(lvListe);
        //pages.add(lvRezept);
        //pages.add(lvVorrat);

        ViewPager vp = (ViewPager) findViewById(R.id.pager);
        CustomPagerAdapter adapter = new CustomPagerAdapter(context,pages);
        vp.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public class CustomPagerAdapter extends PagerAdapter {

        private Context mContext;
        private Vector<View> pages;

        public CustomPagerAdapter(Context context, Vector<View> pages) {
            this.mContext=context;
            this.pages=pages;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View page = pages.get(position);
            container.addView(page);
            return page;
        }

        @Override
        public int getCount() {
            return pages.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view.equals(object);
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

    }

}
```

ListeOverviewAdapter

```
package jan.****teuch.Adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.List;
import jan.****teuch.R;

import jan.****teuch.Model.ListeOverviewModel;


public class ListeOverviewAdapter extends ArrayAdapter<ListeOverviewModel> {

    Context context;
    List<ListeOverviewModel> data;

    public ListeOverviewAdapter(Context con, List<ListeOverviewModel> objects) {
        super(con, R.layout.listeoverview_adapter , objects);

        this.context = con;
        this.data = objects;
    }


    @Override
    public View getView(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);
            convertView.setTag(viewHolder);
        }
        else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // Populate the data into the template view using the data object
        viewHolder.tvName.setText(ekListe.getName());
        viewHolder.tvProgress.setText(ekListe.getProgress());
        // Return the completed view to render on screen
        return convertView;
    }

    private static class ViewHolder {

        TextView tvName;
        TextView tvProgress;

    }

}
```

Activity-Layout

```
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MyActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</RelativeLayout>
```


----------



## dzim (26. Aug 2014)

So ganz verstehe ich dein Problem gerade nicht. Erst recht mit dem FragmentViewPager ist die Arbeit eigentlich sehr einfach.
Fang doch mal mit dem an, zu erklären, was du eigentlich erreichen möchtest. Die Lernkurve ist gerade für GUI-Einsteiger noch recht steil, das gebe ich zu (auch ich hab anfangs nichts mit den Layouts und so anfangen können, weil mir das Konzept der deklarativen UIs neu war), aber kein Grund auf ein *****euch-Package...


----------

