Android viewpager……如何获取视图?
我可以通过web上的各种示例构建一个带有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
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
}
}
}