кнопки внутри разных вкладок

У меня есть три вкладки, и каждая из них расширяет Activity и реализует View.OnClickListener. Когда я выбираю какую-то вкладку и нажимаю кнопку, OnClickListener, реализованный в SomeTabActivity, не работает. Почему? Что мне нужно сделать, чтобы создать свою деятельность? Каждый раз, когда я выбираю какую-то вкладку, мне нужно начинать новую активность?

Мой код:

//основное действие

 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>

person fforbeck    schedule 22.02.2012    source источник
comment
Почему buttonAddItem.setOnClickListener(TabAActivity.this); - почему не просто "это"?   -  person John3136    schedule 22.02.2012
comment
Это то же самое. Но так TabAActivity.this проще всего посмотреть, на что вы ссылаетесь.   -  person fforbeck    schedule 22.02.2012
comment
Заставил мой мозг работать по строкам: интересно, делает ли это что-то с классом, а не с экземпляром класса, в котором я сейчас нахожусь. Также потенциально может возникнуть риск нарушения полиморфизма, если вы изменяете вещи. Тем не менее, я не думаю, что это проблема :-(   -  person John3136    schedule 22.02.2012


Ответы (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);
}

 }
person user1213202    schedule 22.02.2012
comment
Привет, спасибо за помощь. Я решил свою проблему. Мне просто нужно было изменить setContent(R.id.tabId) на setContent(someIntent). Он запускает новое действие каждый раз, когда вы меняете вкладку. - person fforbeck; 23.02.2012