2013-03-12 64 views
0

我正在關注此示例.. https://bitbucket.org/owentech/abstabsviewpager/src 我試圖實施setOnClickListenerButtonOnCreate方法及其獲取力的方法。SherlockFragment上的RuntimeException

注:如果沒有實施Button其做工精細..

代碼:

public class ABSTabsViewPagerActivity extends SherlockFragmentActivity { 

ViewPager mViewPager; 
TabsAdapter mTabsAdapter; 

Button b; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mViewPager = new ViewPager(this); 
    mViewPager.setId(R.id.pager); 

    setContentView(mViewPager); 
    b = (Button) findViewById(R.id.buttonA); 
    b.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "Button Clicked", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    ActionBar bar = getSupportActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    mTabsAdapter = new TabsAdapter(this, mViewPager); 

    mTabsAdapter.addTab(bar.newTab().setText("Fragment 1"), 
      FragmentOne.class, null); 
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 2"), 
      FragmentTwo.class, null); 
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 3"), 
      FragmentThree.class, null); 

} 

public static class TabsAdapter extends FragmentPagerAdapter implements 
     ActionBar.TabListener, ViewPager.OnPageChangeListener { 
    private final Context mContext; 
    private final ActionBar mActionBar; 
    private final ViewPager mViewPager; 
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 

    static final class TabInfo { 
     private final Class<?> clss; 
     private final Bundle args; 

     TabInfo(Class<?> _class, Bundle _args) { 
      clss = _class; 
      args = _args; 
     } 
    } 

    public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) { 
     super(activity.getSupportFragmentManager()); 
     mContext = activity; 
     mActionBar = activity.getSupportActionBar(); 
     mViewPager = pager; 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 

    } 

    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { 
     TabInfo info = new TabInfo(clss, args); 
     tab.setTag(info); 
     tab.setTabListener(this); 
     mTabs.add(info); 
     mActionBar.addTab(tab); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return mTabs.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     TabInfo info = mTabs.get(position); 
     return Fragment.instantiate(mContext, info.clss.getName(), 
       info.args); 
    } 

    public void onPageScrolled(int position, float positionOffset, 
      int positionOffsetPixels) { 
    } 

    public void onPageSelected(int position) { 
     mActionBar.setSelectedNavigationItem(position); 
    } 

    public void onPageScrollStateChanged(int state) { 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     Object tag = tab.getTag(); 
     for (int i = 0; i < mTabs.size(); i++) { 
      if (mTabs.get(i) == tag) { 
       mViewPager.setCurrentItem(i); 
      } 
     } 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 
} 

}

回答

1

setContentView(mViewPager)只有viewpager。所以目前的佈局中沒有按鈕。你不能得到這樣的按鈕b = (Button) findViewById(R.id.buttonA);

設置在xml中也有按鈕的完整佈局。

1

很明顯,您試圖通過調用findViewById()來引用的Button不在根佈局內部,因爲根ViewViewPager。您應該創建一個佈局,其中ViewPagerButton都存在。希望這可以幫助。