2014-02-19 154 views
1

我无法在ViewPager中设置TextView的setText()。 这是我的主要活动课。我想更新由ViewPager制作的一系列布局中的textView。android更改ViewPager中的textView

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方法中找到我的注释行来解释问题。

回答

2

这是测试和工作。

我已经实现了3个视图作为TextViews,但可以是任何布局,那么你只需要做相应的改变。

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

    } 
} 
+0

谢谢你,但,渣油没有定义,并且getViewAtPosition()没有针对ViewPager对象 – avafab

+0

我不好定义,我说,这是未经测试的:)现在尝试 – cYrixmorten

+0

不工作,你为什么不考发布之前? – avafab