活动中的多个ViewPagers

时间:2014-04-24 13:19:27

标签: android android-layout android-viewpager

我正在尝试在一个活动中实现多个ViewPager,但它并没有真正起作用。什么是实现它的最佳方式。我被困了!!

这是活动

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.widget.Button;

import com.viewpagerindicator.CirclePageIndicator;

public class NewWorkoutActivity extends Activity{

    ViewPager corePager;
    ViewPager timePager;
    ViewPager equipmentPager;
    CirclePageIndicator coreIndicator;
    CirclePageIndicator timeIndicator;
    CirclePageIndicator equipmentIndicator;
    Button startWorkoutButton;

    PagerAdapter coreAdapter;
    PagerAdapter timeAdapter;
    PagerAdapter equipmentAdapter;

     String[] timeSets;
     String[] coreTargets;
     String[] equipments;

     int[] timeImages;
     int[] coreImages;
     int[] equipmentImages;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_workout);


         coreTargets = new String[] { "Full body", "Core",
                 "Legs", "Upper Body"};

         coreImages = new int[] { R.drawable.button_target_core,  R.drawable.button_target_core2,
                 R.drawable.button_target_core3,  R.drawable.button_target_core4};

         timeSets = new String[] { "15 Minutes", "20 Minutes", 
                 "30 Minutes", "45 Minutes"};

         timeImages = new int[] { R.drawable.button_target_core,  R.drawable.button_target_core2,
                 R.drawable.button_target_core3,  R.drawable.button_target_core4};

          equipments = new String[] { "Rope", "Kette Bell",
                 "Weight", "Hat"};

         equipmentImages = new int[] { R.drawable.button_target_core,  R.drawable.button_target_core2,
                 R.drawable.button_target_core3,  R.drawable.button_target_core4};



        startWorkoutButton=(Button)findViewById(R.id.startWorkoutButton);
        corePager=(ViewPager)findViewById(R.id.corepager);
        timePager=(ViewPager)findViewById(R.id.timepager);
        equipmentPager=(ViewPager)findViewById(R.id.equipmentpager);
        coreIndicator=(CirclePageIndicator)findViewById(R.id.coreindicator);
        timeIndicator=(CirclePageIndicator)findViewById(R.id.timeindicator);
        equipmentIndicator=(CirclePageIndicator)findViewById(R.id.equipmentindicator);

           coreAdapter = new MyViewPagerAdapter(NewWorkoutActivity.this, coreTargets, coreImages);
            // Binds the Adapter to the ViewPager
            corePager.setAdapter(coreAdapter);

            timeAdapter = new MyViewPagerAdapter(NewWorkoutActivity.this, timeSets, timeImages);
            // Binds the Adapter to the ViewPager
            timePager.setAdapter(timeAdapter);

            equipmentAdapter = new MyViewPagerAdapter(NewWorkoutActivity.this, equipments, equipmentImages);
            // Binds the Adapter to the ViewPager
            corePager.setAdapter(coreAdapter);

            // ViewPager Indicators

            coreIndicator.setViewPager(corePager);
            equipmentIndicator.setViewPager(equipmentPager);
            timeIndicator.setViewPager(timePager);

    }

}





and My Adapter





import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MyViewPagerAdapter extends PagerAdapter {
    // Declare Variables
    Context context;
    String[] desc;
    int[] image;
    LayoutInflater inflater;

    public MyViewPagerAdapter(Context context, String[] desc,  int[] image) {
        this.context = context;
        this.desc = desc;
        this.image = image;
    }

    @Override
    public int getCount() {
        return desc.length;
    }

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

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        // Declare Variables
        TextView desctext;
        ImageView vpimage;

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.body_page, container,
                false);

        // Locate the TextView in viewpager_item.xml
        desctext = (TextView) itemView.findViewById(R.id.vptext);

        // Capture position and set to the TextViews
        desctext.setText(desc[position]);

        // Locate the ImageView in viewpager_item.xml
        vpimage = (ImageView) itemView.findViewById(R.id.vpimage);
        // Capture position and set to the ImageView
        vpimage.setImageResource(image[position]);

        // Add viewpager_item.xml to ViewPager
        ((ViewPager) container).addView(itemView);

        return itemView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // Remove viewpager_item.xml from ViewPager
        ((ViewPager) container).removeView((RelativeLayout) object);

    }
}

logcat告诉我ViewPagers没有适配器实例。

1 个答案:

答案 0 :(得分:7)

这对我有用:

试试这段代码。它没有太大的变化。

注意:我使用的图片只是随机图片..您可以自己使用。

public class MainActivity extends ActionBarActivity {

    Context context;

    String[] timeSets;
    String[] coreTargets;
    String[] equipments;

    int[] timeImages;
    int[] coreImages;
    int[] equipmentImages;

    MyAdapter adapter1, adapter2, adapter3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;

        coreTargets = new String[]{"Full body", "Core",
                "Legs", "Upper Body"};

        coreImages = new int[]{R.drawable.ic_launcher, R.drawable.abc_ab_share_pack_holo_dark,
                R.drawable.abc_ab_stacked_solid_dark_holo, R.drawable.abc_ab_bottom_solid_dark_holo};

        timeSets = new String[]{"15 Minutes", "20 Minutes",
                "30 Minutes", "45 Minutes"};

        timeImages = new int[]{R.drawable.abc_ab_share_pack_holo_light, R.drawable.abc_ab_transparent_light_holo,
                R.drawable.abc_ic_ab_back_holo_light, R.drawable.abc_spinner_ab_pressed_holo_light};

        equipments = new String[]{"Rope", "Kette Bell",
                "Weight", "Hat"};

        equipmentImages = new int[]{R.drawable.abc_ic_clear, R.drawable.abc_textfield_searchview_holo_dark,
                R.drawable.abc_spinner_ab_focused_holo_light, R.drawable.abc_ab_stacked_solid_dark_holo};

        ViewPager view1 = (ViewPager) findViewById(R.id.viewpager1);
        ViewPager view2 = (ViewPager) findViewById(R.id.viewpager2);
        ViewPager view3 = (ViewPager) findViewById(R.id.viewpager3);

        adapter1 = new MyAdapter(coreTargets, coreImages);
        adapter2 = new MyAdapter(timeSets, timeImages);
        adapter3 = new MyAdapter(equipments, equipmentImages);

        view1.setAdapter(adapter1);
        view2.setAdapter(adapter2);
        view3.setAdapter(adapter3);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, 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);
    }

适配器

    private class MyAdapter extends PagerAdapter {

        String[] desc;
        int[] image;


        public MyAdapter(String[] desc, int[] image) {

            super();
            this.desc = desc;
            this.image = image;


        }

        @SuppressLint("NewApi")
        @Override
        public void finishUpdate(ViewGroup container) {
            // TODO Auto-generated method stub
            super.finishUpdate(container);

        }

        @Override
        public int getCount() {

            return desc.length;

        }

        @Override
        public boolean isViewFromObject(View collection, Object object) {

            return collection == ((View) object);
        }

        @Override
        public Object instantiateItem(View collection, int position) {

            // Inflating layout
            LayoutInflater inflater = (LayoutInflater) collection.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // Setting view you want to display as a row element
            View view = inflater.inflate(R.layout.items, null);

            TextView itemText = (TextView) view.findViewById(R.id.textViewMain);

            ImageView imageView = (ImageView) view.findViewById(R.id.imageViewmain);


            try {

                itemText.setText(desc[position]);

                imageView.setImageResource(image[position]);
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            ((ViewPager) collection).addView(view, 0);
            return view;

        }

        @Override
        public void destroyItem(View collection, int position, Object view) {
            ((ViewPager) collection).removeView((View) view);

        }

    }
}

布局如下所示:

<ScrollView 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="com.mike.app.MainActivity$PlaceholderFragment"
    android:background="#ffc42823">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v4.view.ViewPager
            android:layout_width="fill_parent"
            android:layout_height="200dp"
            android:id="@+id/viewpager1"
            android:background="#333333"
            />

        <View
            android:layout_width="fill_parent"
            android:layout_height="3dp"
            android:background="#FFFFFF"></View>

        <android.support.v4.view.ViewPager
            android:layout_width="fill_parent"
            android:layout_height="200dp"
            android:id="@+id/viewpager2"
            android:background="#333333" />

        <View
            android:layout_width="fill_parent"
            android:layout_height="3dp"
            android:background="#FFFFFF">></View>

        <android.support.v4.view.ViewPager
            android:layout_width="fill_parent"
            android:layout_height="200dp"
            android:id="@+id/viewpager3"
            android:background="#333333" />

    </LinearLayout>

</ScrollView>

项目布局:

<LinearLayout 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="com.mike.app.MainActivity$PlaceholderFragment"
    android:background="#ff10c7c6"
    android:orientation="horizontal"
    android:gravity="center">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        android:id="@+id/imageViewmain" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:text="Some Text"
        android:textSize="25sp"
        android:id="@+id/textViewMain"
        android:gravity="center" />

</LinearLayout>

这是你在找什么?如果是,这对我有用.. Lemme知道这是否有效。