android在ViewPager中更改文本视图
我无法在ViewPager中设置TextView的xt()。 这是我的主要活动课。我想在浏览由ViewPager制作的布局中更新textViewandroid在ViewPager中更改文本视图,android,textview,android-viewpager,Android,Textview,Android Viewpager,我无法在ViewPager中设置TextView的xt()。 这是我的主要活动课。我想在浏览由ViewPager制作的布局中更新textView public class MainActivity extends Activity { ViewPager myPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance
public class MainActivity extends Activity {
ViewPager myPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyPagerAdapter adapter = new MyPagerAdapter();
myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
myPager.setAdapter(adapter);
myPager.setCurrentItem(3);
}
@Override
protected void onResume() {
super.onResume();
// this code causes the app to crash, because baseLayout is null
View baseLayout = myPager.findViewWithTag(R.layout.hoteladdress);
//TextView bubu = (TextView) baseLayout.findViewById(R.id.bubu);
//bubu.setText("TEST");
}
private class MyPagerAdapter extends PagerAdapter {
public int getCount() {
return 3;
}
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 = showHotelContact();
break;
case 1:
resId = showHotelAddress();
break;
case 2:
resId = showHotelMap();
break;
}
View view = (View) inflater.inflate(resId, null);
view.setTag(resId);
((ViewPager) collection).addView(view, 0);
return view;
}
}
public int showHotelMap()
{
int resId;
resId = R.layout.hotelmap;
return resId;
}
public int showHotelAddress()
{
int resId;
resId = R.layout.hoteladdress;
return resId;
}
public int showHotelContact()
{
int resId;
resId = R.layout.hotelcontact;
return resId;
}
}
请在onResume方法中找到我的注释行,它们解释了问题。这是经过测试的,并且有效 我已经实现了3个视图作为文本视图,但可以是任何布局,然后你只需要做出相应的更改
public class MainActivity extends Activity {
ViewPager myPager;
MyPagerAdapter adapter;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = new MyPagerAdapter(getLayoutInflater());
myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
myPager.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override protected void onResume() {
super.onResume();
TextView hotelAddressView = adapter
.getViewAtPosition(MyPagerAdapter.POSITION_ADDRESS);
hotelAddressView.setText("modified");
}
private class MyPagerAdapter extends PagerAdapter {
public static final int POSITION_MAP = 0;
public static final int POSITION_ADDRESS = 1;
public static final int POSITION_CONTACT = 2;
private TextView hotelMapView = null;
private TextView hotelAddressView = null;
private TextView hotelContactView = null;
public MyPagerAdapter(LayoutInflater inflater) {
hotelMapView = (TextView) inflater.inflate(R.layout.hotelmap, null);
hotelAddressView = (TextView) inflater.inflate(
R.layout.hoteladdress, null);
hotelContactView = (TextView) inflater.inflate(
R.layout.hotelcontact, null);
}
public int getCount() {
return 3;
}
public TextView getViewAtPosition(int position) {
Log.d("Main", "getViewAtPosition " + position);
TextView view = null;
switch (position) {
case POSITION_MAP:
view = hotelMapView;
break;
case POSITION_ADDRESS:
view = hotelAddressView;
break;
case POSITION_CONTACT:
view = hotelContactView;
break;
}
return view;
}
public Object instantiateItem(ViewGroup collection, int position) {
View view = getViewAtPosition(position);
((ViewPager) collection).addView(view, 0);
return view;
}
@Override public void destroyItem(ViewGroup collection, int position,
Object view) {
((ViewPager) collection).removeView((TextView) view);
}
@Override public boolean isViewFromObject(View view, Object object) {
return view == ((TextView) object);
}
}
}
谢谢,但是,没有为ViewPager对象定义resId,也没有为ViewPager对象定义getViewAtPosition()。我不好,因为我说过它未经测试:)立即尝试。我不想建立一个新的测试项目,添加布局和所有内容,而且我非常确信这个想法是有效的。我只是想给你指明方向。花了些时间来设置一个测试项目。更新后的答案适合我。谢谢,我今晚会尝试并将其标记为答案。