2010-10-06 32 views
19

Tình huống sau: Tôi có TabActivity với ví dụ: ba tab, TabA, TabB, TabC.Android. Cách thay đổi Hoạt động trong một Tab

Có một nút trong hoạt động (Act_C_1) của TabC. Vì vậy, nếu người dùng nhấp vào nút đó, một hoạt động khác (Act_C_2) sẽ xảy ra trong TabC.

Tôi cảm ơn bạn trước vì bất kỳ đề xuất/ý tưởng nào.

Mur

UPD:

Đây là mã của tôi

TabActivity với ba hoạt động:

public class TabScreen extends TabActivity 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.tab_menu); 

     TabHost tabHost = getTabHost(); // The activity TabHost 
     TabHost.TabSpec spec; // Resusable TabSpec for each tab 
     Intent intent; // Reusable Intent for each tab 

     intent = new Intent().setClass(this, SecondActivity.class); 

     // Initialize a TabSpec for each tab and add it to the TabHost 
     spec = tabHost.newTabSpec("tab_1").setIndicator("Tab1",null).setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, ThirdActivity.class); 
     // Initialize a TabSpec for each tab and add it to the TabHost 
     spec = tabHost.newTabSpec("tab_2").setIndicator("Tab2",null).setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, FourthActivity.class); 
     spec = tabHost.newTabSpec("tab_3").setIndicator("Tab3",null).setContent(intent); 
     tabHost.addTab(spec); 
    } 

} 

Hoạt động 'Act_C_1' hoặc FourthActivity.java:

public class FourthActivity extends Activity implements OnClickListener 
{ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fourth); 

     Button BtnWeiter = (Button)findViewById(R.id.BtnWeiter); 
     BtnWeiter.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) 
    {      
     // I also tried to use LocalActivityManager 
     // TabActivity parentTabActivity = (TabActivity) getParent();    
     // LocalActivityManager manager = parentTabActivity.getLocalActivityManager(); 
     // manager.destroyActivity("tab_3", true); 
     // manager.startActivity("tab_3", new Intent(this, FourthActivity.class)); 
     finish(); 
     startActivity(new Intent(this, FourthActivity.class));    
    }   
} 
+1

Vui lòng kiểm tra liên kết sau: [Android: Cách có nhiều hoạt động trong một tab TabActivity] (http://gamma-point.com/content/android-how-have-multiple-activities-under -single-tab-tabactivity) – Ian

Trả lời

-2

Xử lý sự kiện onClick cho nút

hoàn thành() hoạt động Thêm phương thức startActivity để bắt đầu một hoạt động khác.

Cảm ơn

+0

Đề xuất hay, nhưng điều đó không hiệu quả theo TabActivity ... ít nhất là bởi tôi. – Tima

+0

Xin vui lòng gửi đoạn mã của bạn ... Tôi sẽ cố gắng chỉnh sửa nó. –

+0

Tôi đã bao gồm một phần quan trọng trong mã của mình. 'Không hoạt động' không đúng, nhưng nếu tôi làm theo cách đó, hoạt động của tab sẽ được hoàn thành. Những gì tôi muốn có, đó chỉ là một hoạt động trong tabactivity sẽ được hoàn thành và một số khác sẽ được bắt đầu trong tab. – Tima

-1

Chỉ cần thêm này cho tất cả các tab:

yourTabHost.getChildAt(0).setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     getTabHost().setCurrentTab(0); 
    } 
}); 
24

Các hoạt động trong tab có thể được chuyển theo cách sau đây.

Đầu tiên Chúng ta hiểu được dòng chảy:

  1. Chúng ta có trong một loạt Tab, hoạt động (nói một danh sách) từ đó chúng ta cần phải đi đến các Hoạt động tiếp theo (nói chi tiết cho mục nhấp) dưới cùng một tab. Đối với điều này, chúng tôi có thể sử dụng khái niệm thay thế hoạt động. Đồng thời, thiết lập cờ cho tab được chọn và khác để biết chi tiết đang được hiển thị ngay bây giờ

  2. Khi chúng tôi nhấn lại, chúng tôi sẽ nhận hoạt động trước đó trong cùng một tab. Đối với điều này thay vì một lần nữa thay thế hoạt động, chúng tôi có thể làm mới tab trong khi sử dụng cờ cụ thể cho tab đã được chọn. Ngoài ra nếu cờ cho hiển thị chi tiết là đúng, chúng tôi sẽ đi theo danh sách trong cùng một tab hoặc nếu không chúng tôi sẽ đi hoạt động trước khi tabwidget (sử dụng bình thường của onBackPressed)

Mã này có thể thực hiện như sau ..

  1. Để chuyển từ danh sách sang chi tiết ...

(Điều này có thể trong OnClickListener)

private OnClickListener textListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Constants.SHOW_DETAILS = true; 
     Intent intent = new Intent(context, DetailsActivity.class); 
     replaceContentView("activity3", intent); 
     } 
}; 

public void replaceContentView(String id, Intent newIntent) { 
    View view = ((ActivityGroup) context) 
      .getLocalActivityManager() 
      .startActivity(id, 
        newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
      .getDecorView(); 
    ((Activity) context).setContentView(view); 

} 
  1. Khi trở lại ép được thực hiện, chúng tôi ghi đè lên trên BackPressed trong mỗi Hoạt động dưới tab để chuyển tới danh sách một lần nữa từ các chi tiết màn hình

    @Override 
        public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
    if (MathHelper.SHOW_DETAILS) { 
        Log.e("back", "pressed accepted"); 
        Constants.LIST_ACTIVITY = 1; 
        Constants.SHOW_DETAILS = false; 
        Intent intent = new Intent(this, Tab_widget.class); 
        startActivity(intent); 
        finish(); 
        } 
    } 
    

phần quan trọng nhất ở đây là Hằng số.LIST_ACTIVITY = 1; nó cho biết tab nào chúng ta đang ở. do đó các hoạt động tương ứng sẽ có giá trị là 0,1,2 ... vv

Một lần nữa để tải danh sách đúng (Activty) khi hoạt động tab được làm mới, chúng ta phải bao gồm trong TabWidget onCreate sau khi tạo các tab

tabHost.setCurrentTab(Constants.LIST_ACTIVITY); 
+2

+1, chỉ cần thông báo - 'ngữ cảnh' ở trên đề cập đến hoạt động chứa, không phải đối với vùng chứa (TabActivity). Oh và tôi tự hỏi tại sao không theo thiết kế ý định Android và sử dụng Constants.LIST_ACTIVITY thay vào đó .. – kellogs

+0

ya đúng ngữ cảnh đề cập đến các hoạt động chứa các tab. –

+0

Tôi không đồng ý, ngữ cảnh * là * TabActivity, nếu không bạn không thể truyền nó vào Nhóm hoạt động. –

0

Chỉ cần sử dụng Intent.FLAG_ACTIVITY_CLEAR_TOP cờ để thay thế một hoạt động cho tab cần thiết.

intent = new Intent().setClass(this, YourActivity.class); 
spec = tabHost.newTabSpec("tab1").setIndicator("Tab1",null) 
     .setContent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
tabHost.addTab(spec); 
Các vấn đề liên quan