簡體   English   中英

如何將水平viewpager放在垂直viewpager內

[英]How to put horizontal viewpager inside vertical viewpager

我已經實現了垂直viewpager和水平viewpager單獨的類。 現在我試圖將水平viewpager放在垂直viewpager中。 但是我得到了nullpointer異常

這里的方法返回水平viewpager

public ViewPager getViewPager()
{
    LayoutInflater inflater = (LayoutInflater)getSystemService
          (Context.LAYOUT_INFLATER_SERVICE);

  View rootView = inflater.inflate(R.layout.swipe_item, null, true);
  android.support.v4.view.ViewPager pag = (android.support.v4.view.ViewPager)rootView.findViewById(R.id.pager);

    mDemoCollectionPagerAdapter = new DemoCollectionPagerAdapter(getSupportFragmentManager());
    pag.setAdapter(mDemoCollectionPagerAdapter);

    return pag ;
}

在垂直視圖傳呼機中,我試圖將水平視圖傳呼機

VerticalItem item  = new VerticalItem();
ViewPager pag = item.getViewPager();

mViewPager = (VerticalPager) findViewById(R.id.pager);
mViewPager.addView(pag);
mViewPager.setTag(0);

這兩個類都是fragmentactivity的子類

這是我的原木貓

06-01 10:25:59.468:E / AndroidRuntime(2128):致命異常:主
06-01 10:25:59.468:E / AndroidRuntime(2128):java.lang.RuntimeException:無法啟動活動ComponentInfo {com.example.infogamma / com.example.infogamma.CollectionDemoActivity}:java.lang.IllegalStateException:系統onCreate()之前的活動無法使用的服務
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
06-01 10:25:59.468:E / AndroidRuntime(2128):at android.app.ActivityThread.access $ 600(ActivityThread.java:141)
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.os.Handler.dispatchMessage(Handler.java:99)
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.os.Looper.loop(Looper.java:137)
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.app.ActivityThread.main(ActivityThread.java:5103)
06-01 10:25:59.468:E / AndroidRuntime(2128):at java.lang.reflect.Method.invokeNative(本機方法)
06-01 10:25:59.468:E / AndroidRuntime(2128):at java.lang.reflect.Method.invoke(Method.java:525)
06-01 10:25:59.468:E / AndroidRuntime(2128):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
06-01 10:25:59.468:E / AndroidRuntime(2128):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
06-01 10:25:59.468:E / AndroidRuntime(2128):在dalvik.system.NativeStart.main(本機方法)
06-01 10:25:59.468:E / AndroidRuntime(2128):由以下原因引起:java.lang.IllegalStateException:在onCreate()之前活動無法使用系統服務
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.app.Activity.getSystemService(Activity.java:4492)
06-01 10:25:59.468:E / AndroidRuntime(2128):在com.example.infogamma.VerticalItem.getViewPager(VerticalItem.java:151)
06-01 10:25:59.468:E / AndroidRuntime(2128):在com.example.infogamma.CollectionDemoActivity.onCreate(CollectionDemoActivity.java:63)
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.app.Activity.performCreate(Activity.java:5133)
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
06-01 10:25:59.468:E / AndroidRuntime(2128):位於android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
06-01 10:25:59.468:E / AndroidRuntime(2128):...還有11個

這是我的收藏

public class CollectionDemoActivity extends FragmentActivity {

    DemoCollectionPagerAdapter mDemoCollectionPagerAdapter;

    static String[] screens= {"makescr1","makescr2","makescr3"};

    /**
     * The {@link android.support.v4.view.ViewPager} that will display the object collection.
     */
    VerticalPager mViewPager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.full_image);

        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //ViewGroup fl =  (ViewGroup)findViewById(R.layout.full_image);
        View rootView = inflater.inflate(R.layout.swipe_item, null, false);
        android.support.v4.view.ViewPager pag = (android.support.v4.view.ViewPager)rootView.findViewById(R.id.pager);

       VerticalItem item  = new VerticalItem();
        pag = item.getViewPager();

        final ActionBar actionBar = getActionBar();

        actionBar.hide();

        //ViewPager  vp.item.getViewPager();
        // Set up the ViewPager, attaching the adapter.
        mViewPager = (VerticalPager) findViewById(R.id.pager);
        //mViewPager.setHorizontalScrollBarEnabled(true);
       mViewPager.addView(pag);
       mViewPager.setTag(0);
    }

這是我的verticalitem課程

public  class VerticalItem extends FragmentActivity {

    /**
    * The {@link android.support.v4.view.PagerAdapter} that will provide fragments       representing
    * each object in a collection. We use a {@link android.support.v4.app.FragmentStatePagerAdapter}
     * derivative, which will destroy and re-create fragments as needed, saving and restoring their
     * state in the process. This is important to conserve memory and is a best practice when
     * allowing navigation between objects in a potentially large collection.
     */
    DemoCollectionPagerAdapter mDemoCollectionPagerAdapter;

    static String[] screens= {"makescr1","makescr2","makescr3"};

    /**
     * The {@link android.support.v4.view.ViewPager} that will display the object collection.
     */
    VerticalPager mViewPager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.full_image);
    }

    public ViewPager getViewPager()
    {
        LayoutInflater inflater = (LayoutInflater)getSystemService
              (Context.LAYOUT_INFLATER_SERVICE);

      View rootView = inflater.inflate(R.layout.swipe_item, null, true);
      android.support.v4.view.ViewPager pag = (android.support.v4.view.ViewPager)rootView.findViewById(R.id.pager);

        mDemoCollectionPagerAdapter = new DemoCollectionPagerAdapter(getSupportFragmentManager());
        pag.setAdapter(mDemoCollectionPagerAdapter);

        return pag ;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // This is called when the Home (Up) button is pressed in the action bar.
                // Create a simple intent that starts the hierarchical parent activity and
                // use NavUtils in the Support Package to ensure proper handling of Up.
                Intent upIntent = new Intent(this, MainActivity.class);
                if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                    // This activity is not part of the application's task, so create a new task
                    // with a synthesized back stack.
                  /*  TaskStackBuilder.from(this)
                            // If there are ancestor activities, they should be added here.
                            .addNextIntent(upIntent)
                            .startActivities();
                    finish();*/
                } else {
                    // This activity is part of the application's task, so simply
                    // navigate up to the hierarchical parent activity.
                    NavUtils.navigateUpTo(this, upIntent);
                }
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
        /**
     * A {@link android.support.v4.app.FragmentStatePagerAdapter} that returns a fragment
     * representing an object in the collection.
     */
    public static class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {

        public DemoCollectionPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int i) {
            Fragment fragment = new DemoObjectFragment();
            Bundle args = new Bundle();
            args.putInt(DemoObjectFragment.ARG_OBJECT, i + 1); // Our object is just an integer :-P
            args.putString("scr",screens[i]);
            fragment.setArguments(args);

            return fragment;
        }

        @Override
        public int getCount() {
            // For this contrived example, we have a 100-object collection.
            return 3;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return "OBJECT " + (position + 1);
        }
    }

    /**
     * A dummy fragment representing a section of the app, but that simply displays dummy text.
     */
    public static class DemoObjectFragment extends Fragment {

        public static final String ARG_OBJECT = "object";

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_collection_object, container, false);
            Bundle args = getArguments();
            ImageView img = (ImageView)rootView.findViewById(R.id.screen);
            int resId = getResources().getIdentifier(args.getString("scr"), "drawable", "com.example.infogamma");
            img.setImageResource(resId);
            //getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit(); 
            //rootView.setRotation(-90f);            

            return rootView;
        }
    }
}

根視圖的值為空,是說附加到根:

查看rootView = inflater.inflate(R.layout.swipe_item,null,true);

給它一個rootView或將true設置為false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM