2012-02-22 37 views
0

我有三個選項卡,每個選項卡擴展活動並實現View.OnClickListener 當我選擇某個選項卡並單擊某個按鈕時,實現到SomeTabActivity的OnClickListener不起作用。爲什麼? 我需要做什麼來創建我的活動? 每當我選擇一些標籤,我需要開始新的活動?不同標籤內的按鈕

我的代碼:

//主活動

public class TripoidActivity extends TabActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     init(); 
    } 

    private void init() { 
     final TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); 
     tabHost.setup(); 
     final Resources res = getResources(); 

     createTabA(tabHost, res); 
     createTabB(tabHost, res); 
     createTabC(tabHost, res); 

    } 

} 

//選項卡A活性

public class TabAActivity extends Activity implements View.OnClickListener { 


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

    private void init() { 
     buttonAddItem = (Button) findViewById(R.id.btAddItem); 
     buttonAddItem.setOnClickListener(TabAActivity.this); 
    } 

    @Override 
    public void onClick(View v) { 
     //do something (show a toast msg) 
    } 

    } 

//主要佈局XML

<?xml version="1.0" encoding="utf-8"?> 
    <TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:padding="5dp" > 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:padding="5dp" > 

      <include layout="@layout/tab_a" /> 
      <include layout="@layout/tab_b" /> 
      <include layout="@layout/tab_c" /> 

     </FrameLayout> 
    </LinearLayout> 
    </TabHost> 
+0

爲什麼buttonAddItem.setOnClickListener(TabAActivity.this); - 爲什麼不只是'這個'? – John3136 2012-02-22 00:53:57

+0

是一回事。但這種方式「TabAActivity.this」是最容易看到你所指的。 – 2012-02-22 01:23:38

+0

讓我的大腦沿着「我不知道這是否與班上的某些事情做了某些事情,而不是我目前所在的班級的實例」這樣的句子。如果你修改東西,也有可能會破壞多態性的風險。不過,我不認爲這是問題:-( – John3136 2012-02-22 02:39:20

回答

1

嘗試......

主要活動

public class TabWidgetExampleActivity extends TabActivity { 
/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Resources res = getResources(); // Resource object to get Drawables 
    TabHost tabHost = getTabHost(); // The activity TabHost 
    TabHost.TabSpec spec; // Resusable TabSpec for each tab 
    Intent intent; // Reusable Intent for each tab 

    // Create an Intent to launch an Activity for the tab (to be reused) 
    intent = new Intent().setClass(this, DailyActivity.class); 

    // Initialize a TabSpec for each tab and add it to the TabHost 
    spec = tabHost.newTabSpec("Daily").setIndicator("", 
         res.getDrawable(R.drawable.tab_daily)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    // Do the same for the other tabs 
    intent = new Intent().setClass(this, MapActivity.class); 
    spec = tabHost.newTabSpec("Map").setIndicator("", 
         res.getDrawable(R.drawable.tab_map)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, HourlyActivity.class); 
    spec = tabHost.newTabSpec("Hourly").setIndicator("", 
         res.getDrawable(R.drawable.tab_hour)) 
        .setContent(intent); 
    tabHost.addTab(spec); 


    } 
    } 

標籤活動

public class HourlyActivity extends Activity{ 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    final Button btn=new Button(this); 
    btn.setText("button"); 
    final LinearLayout l1=new LinearLayout(this); 
    btn.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "hai", Toast.LENGTH_LONG).show(); 

      Intent i=new Intent(); 
      i.setClass(getApplicationContext(), MapActivity.class); 
      startActivity(i); 


     } 
    }); 
    setContentView(btn); 
} 

} 
+0

嗨,tks for help.I解決了我的問題,我只需要將「setContent(R.id.tabId)」更改爲「setContent(someIntent)」。每次更改選項卡時,它都會啓動一項新活動。 – 2012-02-22 21:39:38