gpt4 book ai didi

Android viewpager ......如何获取 View ?

转载 作者:行者123 更新时间:2023-11-29 14:54:37 26 4
gpt4 key购买 nike

我可以使用来自网络上各种示例的 viewpager 构建一个 Activity ,但我是否可以不再像在原始 Activity 中那样使用 View ?以下面的例子:

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 thisIsWhatBreaks = (LinearLayout)findViewById(R.id.layoutThatsAlwaysNull);为 LinearLayout 赋值。我在哪里以及如何执行此操作?

如何再次为 LinearLayout 赋值,以便可以在 OnConfurationChanged() 方法中对其进行修改,如此 Activity 类中所示?既然我已经将大部分 View 从 main.xml 移动到 farleft.xml 并且似乎无法找到一种方法来完成这项工作,我的 Activity 中就会不断出现 nullpointerexceptions。

最佳答案

在您的 ViewPager 上,有一个名为 getCurrentItem() 的方法,它将返回当前 Activity View 在 ViewPager 中的位置。

现在,制作您自己的 ViewPagerAdapter,创建 View 列表,覆盖 instantiateItem(pagerView, position),将 View 添加到 pagerView 并根据请求的位置从您的列表中返回 View .

然后,您创建一个名为 getView(int) 的方法,它将根据您从 getCurrentItem() 获得的位置为您提供 View 。

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

此外,不要忘记在您从 PagerView 中删除 View 的地方覆盖 destroyItem()

我认为没有更简单的方法可以做到这一点,因为他们似乎根本没有提供任何 getView() 方法,所以您基本上必须自己制作一个。但相比之下,您现在也可以很好地控制自己的观点。

关于Android viewpager ......如何获取 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9288756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com