Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android viewpager……如何获取视图?_Android_View_Android Viewpager - Fatal编程技术网

Android viewpager……如何获取视图?

Android viewpager……如何获取视图?,android,view,android-viewpager,Android,View,Android Viewpager,我可以通过web上的各种示例构建一个带有viewpager的活动,但是我可以不再使用原始活动中的视图吗?以以下为例: public class SimpleViewPagerActivity extends Activity { LinearLayout thisIsWhatBreaks; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(sav

我可以通过web上的各种示例构建一个带有viewpager的活动,但是我可以不再使用原始活动中的视图吗?以以下为例:

public class SimpleViewPagerActivity extends Activity {

    LinearLayout thisIsWhatBreaks;

    @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);

            thisIsWhatBreaks = (LinearLayout)findViewById(R.id.layoutThatsAlwaysNull);

    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            thisIsWhatBreaks.setBackgroundColor(Color.BLACK);

        }
        else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            thisIsWhatBreaks.setBackgroundColor(Color.RED);
        }   
    }


    public void farLeftButtonClick(View v)
    {
            Toast.makeText(this, "Far Left Button Clicked", Toast.LENGTH_SHORT).show(); 

    }

    public void farRightButtonClick(View v)
    {
            Toast.makeText(this, "Far Right Elephant Button Clicked", Toast.LENGTH_SHORT).show(); 

    }

    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

            }

    }

}
我最初在main.xml中使用thisIsWhatBreaks LinearLayout,但现在将其移动到farleft.xml,这是PagerAdapter中膨胀的布局之一

因此,我不能再使用 LinearLayout This Is WhatBreaks=LinearLayout IndViewByIDR.id.LayoutHastAll; 将值指定给LinearLayout。我在哪里以及如何做到这一点


如何再次为LinearLayout赋值,以便在OnConfuturationChanged方法中对其进行修改,如此activity类中所示?现在我已经将大多数视图从main.xml移到farlefit.xml,并且似乎找不到一种方法来实现这一点。在您的ViewPager上,有一个名为getCurrentItem的方法将返回当前活动视图在ViewPager中的位置

现在,创建您自己的ViewPagerAdapter,创建视图列表,覆盖InstanceItemPageView,position,将视图添加到pagerView,并根据请求的位置从列表中返回视图

然后,创建一个名为getViewint的方法,该方法将根据从getCurrentItem获得的位置为您提供视图

最后,您现在可以调用currentView.findViewById

另外,不要忘记覆盖从PagerView中删除视图的destroyItem。
我不认为有任何更简单的方法可以做到这一点,因为他们似乎根本没有提供任何getView、方法,所以基本上你必须自己制作一个。但与此相反,您现在也可以很好地控制视图。

在ViewPager上,有一个名为getCurrentItem的方法,它将返回当前活动视图在ViewPager中的位置

现在,创建您自己的ViewPagerAdapter,创建视图列表,覆盖InstanceItemPageView,position,将视图添加到pagerView,并根据请求的位置从列表中返回视图

然后,创建一个名为getViewint的方法,该方法将根据从getCurrentItem获得的位置为您提供视图

最后,您现在可以调用currentView.findViewById

另外,不要忘记覆盖从PagerView中删除视图的destroyItem。
我不认为有任何更简单的方法可以做到这一点,因为他们似乎根本没有提供任何getView、方法,所以基本上你必须自己制作一个。但相比之下,您现在也可以很好地控制视图。

我所需要做的就是移动:

这是WhatBreaks=IDR.id.LayoutThatsallwaysAlll的INDIVIEW外的线性布局

对于在PagerAdapter的InstanceItem内膨胀当前layout.xml的情况

我对NullPointerException的问题是,我的所有视图都在onCreate中执行。我必须将所有视图从onCreate移动到InstanceItem中的case语句中

请参阅下面更正的代码…以防其他人遇到此问题

public class SimpleViewPagerActivity extends Activity {

LinearLayout thisIsWhatBreaks;

@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);

        //REMOVE THE LINEAR LAYOUT FROM BEING INSTANTIATED HERE!

}


@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

        thisIsWhatBreaks.setBackgroundColor(Color.BLACK);

    }
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        thisIsWhatBreaks.setBackgroundColor(Color.RED);
    }   
}


private class MyPagerAdapter extends PagerAdapter {

        public int getCount() {
                return 5;
        }

        public Object instantiateItem(View collection, int position) {

          view = new View(MainHome.this);

          final LayoutInflater inflater = (LayoutInflater) MainHome.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

          switch(position){

          case 0 : 
                    view = inflater.inflate(R.layout.farleft, null);
                    thisIsWhatBreaks= (LinearLayout)v.findViewById(R.id.layoutThatUsedToAlwaysBeNull);

                     ***Now you can modify thisIsWhatBreaks***
                    thisIsWhatBreaks.setBackgroundColor(Color.black);

              break;

          case 1: 

                    view = inflater.inflate(R.layout.farright, null);


              break;

          default :

              break;    
          }

         ((ViewPager) collection).addView(v,0);
         return v;  

        }

        @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

        }

    }

}

我所需要做的就是搬家:

这是WhatBreaks=IDR.id.LayoutThatsallwaysAlll的INDIVIEW外的线性布局

对于在PagerAdapter的InstanceItem内膨胀当前layout.xml的情况

我对NullPointerException的问题是,我的所有视图都在onCreate中执行。我必须将所有视图从onCreate移动到InstanceItem中的case语句中

请参阅下面更正的代码…以防其他人遇到此问题

public class SimpleViewPagerActivity extends Activity {

LinearLayout thisIsWhatBreaks;

@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);

        //REMOVE THE LINEAR LAYOUT FROM BEING INSTANTIATED HERE!

}


@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

        thisIsWhatBreaks.setBackgroundColor(Color.BLACK);

    }
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        thisIsWhatBreaks.setBackgroundColor(Color.RED);
    }   
}


private class MyPagerAdapter extends PagerAdapter {

        public int getCount() {
                return 5;
        }

        public Object instantiateItem(View collection, int position) {

          view = new View(MainHome.this);

          final LayoutInflater inflater = (LayoutInflater) MainHome.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

          switch(position){

          case 0 : 
                    view = inflater.inflate(R.layout.farleft, null);
                    thisIsWhatBreaks= (LinearLayout)v.findViewById(R.id.layoutThatUsedToAlwaysBeNull);

                     ***Now you can modify thisIsWhatBreaks***
                    thisIsWhatBreaks.setBackgroundColor(Color.black);

              break;

          case 1: 

                    view = inflater.inflate(R.layout.farright, null);


              break;

          default :

              break;    
          }

         ((ViewPager) collection).addView(v,0);
         return v;  

        }

        @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

        }

    }

}