2011-11-01 30 views
1

我對Android開發相當陌生,所以遇到了onResume()方法的問題。從onResume()方法訪問Viewpager中的TextView.setText()方法

當我嘗試從onResume()方法中寫入Name.setText()時,我的代碼崩潰。 從onPause()方法中編寫TextView令人驚訝地沒有任何問題。

如何從onResume()方法訪問此TextView?

public class Main extends Activity { 

    private ViewPager awesomePager; 
    private static int NUM_AWESOME_VIEWS = 2; 
    private Context cxt; 
    private AwesomePagerAdapter awesomeAdapter; 
    View v; 
    TextView Name; 


    /** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    cxt = this; 

    awesomeAdapter = new AwesomePagerAdapter(); 
    awesomePager = (ViewPager) findViewById(R.id.awesomepager); 
    awesomePager.setAdapter(awesomeAdapter); 

} 

@Override 
protected void onResume() { 
    super.onResume(); 
    Name.setText("1"); 

} 

@Override 
protected void onPause() { 
    super.onPause(); 

} 

private class AwesomePagerAdapter extends PagerAdapter{ 

      @Override 
      public int getCount() { 
        return NUM_AWESOME_VIEWS; 
      } 

      @Override 
      public Object instantiateItem(View collection, int position) { 

       View v = new View(cxt.getApplicationContext()); 
       final LayoutInflater inflater = (LayoutInflater) cxt 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

       switch (position) { 

       case 0: 

        v = inflater.inflate(R.layout.subpage1, null, false); 
        Name = (TextView) v.findViewById(R.id.name); 

        break; 

       case 1: 

        v = inflater.inflate(R.layout.subpage2, null, false); 

        break; 

       default: 

        break; 
       } 

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

       return v;  

      } 

      @Override 
      public void destroyItem(View collection, int position, Object view) { 
       ((ViewPager) collection).removeView(v); 

      } 

      @Override 
      public boolean isViewFromObject(View view, Object object) { 
       return view == object; 
      } 

      @Override 
      public void finishUpdate(View arg0) {} 

      @Override 
      public void restoreState(Parcelable arg0, ClassLoader arg1) {} 

      @Override 
      public Parcelable saveState() { 
        return null; 
      } 

      @Override 
      public void startUpdate(View arg0) {}    

} 
} 

回答

1

Name必須設置爲空......您的應用在初始化之前必須暫停。在試圖用它做任何事情之前,檢查它是否已經初始化。你是onResume()應該看起來像這樣:

@Override 
protected void onResume() { 
    super.onResume(); 
    if(Name != null){ 
    Name.setText("1"); 
    } 
} 

P.S.標準的Java約定是讓所有的變量名都以小寫字母開頭。您應該可以將Name重命名爲name

+0

嗨! onCreate()方法中的初始化給了我以下錯誤:java.lang.RuntimeException:無法恢復活動{...}:java.lang.NullPointerException ... 引起:java.lang.NullPointerException at Main.onResume(...) ... – user1023851

+0

我們需要更多的信息。 –

+0

嗨寇蒂斯!這是在啓動時的完整錯誤日誌:http://pastebin.com/Hiu1evmd – user1023851

1

首先,在您的代碼中,您不會獲取對Name文本視圖的引用,因此您必須獲取NullPointerException。

如果你修復它,它應該工作IMO。如果沒有,請告訴我們您獲得的例外名稱。

+0

嗨!在onCreate()方法中的初始化給我以下錯誤:java.lang.RuntimeException:無法恢復活動{...}:java.lang.NullPointerException ... 引起:java.lang.NullPointerException Main.onResume(...) ... – user1023851