2012-02-22 4 views
0

3 개의 탭이 있고 각각 하나가 Activity를 확장하고 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

+0

같은 것입니다. 그러나 이런 식으로 "TabAActivity.this"는 당신이 참조한 것을 보는 것이 가장 쉽습니다. –

+0

"이 수업이 내가 현재 수업중인 수업의 인스턴스가 아니라 수업에서 뭔가를하는지 궁금합니다." 또한 사안을 수정하면 다형성을 파괴 할 위험이 있습니다. 그래도 나는 이것이 문제라고 생각하지 않는다 :-( – John3136

답변

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

안녕하세요, 도움을 청합니다. 내 문제를 해결했습니다. "setContent (R.id.tabId)"를 "setContent (someIntent)"로 변경해야했습니다. 탭을 변경할 때마다 새로운 활동이 시작됩니다. –

관련 문제