Как заполнить Listview на одной из страниц макета ViewPager

1

У меня есть очень простой вопрос о ViewPager. У меня есть ViewPagerActivity, который включает 5 страниц, где каждая страница имеет свой собственный макет xml, в дополнение к main.xml (см. Код ниже), на который ссылается в ViewPagerActivity.java setContentView (R.layout.main).

Страница "средний" (средний.xml, который является одним из пяти макетов xml) включает в себя список, который динамически заполняется данными из базы данных.

Вот мой вопрос. Где я должен поставить следующий код, который укупоривает Listview и устанавливает ClickListener?

mMemoListView = (ListView)findViewById(R.id.list_in_middle_layout);
mMemoListAdapter = new MemoListAdapter(this);
mMemoListView.setAdapter(mMemoListAdapter);
mMemoListView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
         viewMemo(position);
}
   });   

Я не думаю, что это будет в ViewPagerActivity.java, если только он не может ссылаться как на main.xml, так и на middle.xml через setContentView(). Я также подумал о добавлении класса java, который будет ссылаться на middle.xml, но я не знаю, как он может быть активирован (?), Когда средняя страница завышена. (См. MyPageAdapter ниже, чтобы узнать, как каждая страница завышена.)

Спасибо за прочтение. Пожалуйста, не стесняйтесь спрашивать о дальнейших разъяснениях.

Вот main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/myfivepanelpager"/>
</LinearLayout>

Вот средний.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffffff"
>
<RelativeLayout
    android:id="@+id/titleLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:background="#ffffffff"
    >
    <com.ViewPager.TitleBackgroundButton
        android:id="@+id/titleBackgroundBtn"
             android:layout_width="fill_parent"
    android:layout_height="48dp"
    android:layout_alignParentTop="true"
        android:text="Memo"
        android:textSize="18dp"
        android:textStyle="bold"
        />
</RelativeLayout>
<ListView
    android:id="@+id/list_in_middle_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="4dp"
    android:layout_below="@+id/titleLayout"
    android:layout_above="@+id/buttonLayout"
    android:divider="#00000000"
    android:listSelector="#00000000"
    android:cacheColorHint="#00000000"
    />
<LinearLayout
    android:id="@+id/buttonLayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:layout_alignParentBottom="true"
    >
    <LinearLayout
    android:id="@+id/buttonLayout"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
>
<com.ViewPager.TitleBitmapButton
android:id="@+id/newMemoBtn"
android:layout_width="100dp"
android:layout_height="48dp"
android:text="New"
android:textSize="18dp"
android:textStyle="bold"
android:textColor="#ff420000"
/>
<com.ViewPager.TitleBitmapButton
android:id="@+id/closeBtn"
android:layout_width="100dp"
android:layout_height="48dp"
android:layout_marginLeft="20dp"
android:text="Close"
android:textSize="18dp"
android:textStyle="bold"
android:textColor="#ff420000"
/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>

Вот ViewPagerActivity.java

public class ViewPagerActivity extends Activity {
/** Called when the activity is first created. */

public static final String TAG = "ViewPagerActivity";
@Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            MyPagerAdapter adapter = new MyPagerAdapter();
            ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
            myPager.setAdapter(adapter);
            myPager.setCurrentItem(2);

    }

    private class MyPagerAdapter extends PagerAdapter {

            public int getCount() {
                    return 5;
            }

            public Object instantiateItem(View collection, int position) {

                    LayoutInflater inflater = (LayoutInflater) collection.getContext()
                                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                    int resId = 0;
                    switch (position) {
                    case 0:
                            resId = R.layout.farleft;
                            break;
                    case 1:
                            resId = R.layout.left;
                            break;
                    case 2:
                            resId = R.layout.middle;
                            break;
                    case 3:
                            resId = R.layout.right;
                            break;
                    case 4:
                            resId = R.layout.farright;
                            break;
                    }

                    View view = inflater.inflate(resId, null);

                    ((ViewPager) collection).addView(view, 0);

                    return view;
            }

            @Override
            public void destroyItem(View arg0, int arg1, Object arg2) {
                    ((ViewPager) arg0).removeView((View) arg2);

            }

            @Override
            public void finishUpdate(View arg0) {
                    // TODO Auto-generated method stub

            }

            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                    return arg0 == ((View) arg1);

            }

            @Override
            public void restoreState(Parcelable arg0, ClassLoader arg1) {
                    // TODO Auto-generated method stub

            }

            @Override
            public Parcelable saveState() {
                    // TODO Auto-generated method stub
                    return null;
            }

            @Override
            public void startUpdate(View arg0) {
                    // TODO Auto-generated method stub

            }

    }
  • 0
    Возможно, вы захотите сделать так, чтобы ваш MyPagerAdapter расширял FragmentPagerAdapter из библиотеки поддержки. Таким образом, вы сможете абстрагировать логику каждой страницы в отдельный Fragment . Это, вероятно, сделает вещи намного более управляемыми в долгосрочной перспективе, особенно если вы планируете добавить больше страниц позже. Ссылка на документацию также содержит пример кода.
  • 0
    Спасибо за совет! Я попробую это.
Показать ещё 1 комментарий
Теги:
android-viewpager
listview

1 ответ

2
Лучший ответ

Вы должны добавить его в свой коммутатор в файле instantiateItem:

public Object instantiateItem(View collection, int position) {


                View view=null;

                LayoutInflater inflater = (LayoutInflater) collection.getContext()
                                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                int resId = 0;
                switch (position) {
                case 0:
                        resId = R.layout.farleft;
                        view = inflater.inflate(resId, null);
                        break;
                case 1:
                        resId = R.layout.left;
                        view = inflater.inflate(resId, null);
                        break;
                case 2:
                        resId = R.layout.middle;
                        view = inflater.inflate(resId, null);
                        ListView memoListView = (ListView)view.findViewById(R.id.list_in_middle_layout);
                        MemoListAdapter memoListAdapter = new MemoListAdapter(this);
                        memoListView.setAdapter(memoListAdapter);

                        break;
                case 3:
                        resId = R.layout.right;
                        view = inflater.inflate(resId, null);
                        break;
                case 4:
                        resId = R.layout.farright;
                        view = inflater.inflate(resId, null);
                        break;
                }



                ((ViewPager) collection).addView(view, 0);

                return view;
        }
  • 0
    Спасибо за быстрый ответ. Должен ли я поместить код ClickListener туда же?
  • 0
    Также часть «new MemoListAdapter (this)» вызывает ошибку «Конструктор MemoListAdapter (ViewPagerActivity.MyPagerAdapter) не определен». Должен ли я использовать что-то другое, чем «это» в качестве аргумента? FYI. Конструктор в MemoListAdapter определяется как «общедоступный MemoListAdapter (Context context) {mContext = context;}»
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню