2011-11-11 30 views
5

Tôi hiện đang trong một dự án Android, trong đó chế độ xem chính của chúng tôi là TabActivity và mỗi tab là một Hoạt động riêng biệt. Một là một MapActivity và hai là hai hoạt động bình thường. Đầu tiên lưu ý rằng tôi nghĩ rằng chúng ta phải có mỗi tab như các hoạt động riêng biệt, vì có quá nhiều mã trong các hoạt động riêng biệt để chỉ có TabHost chuyển chế độ xem nội dung trên tab thay đổi và có tất cả mã trong cùng một lớp học. Dù sao, quay trở lại vấn đề.Hành động cháy nổ trên hoạt động khác trong TabHost? (Android)

Một trong các tab bao gồm một nút, khi được nhấn sẽ làm cho chuyển đổi TabActivity thành MapActivity và tạo bản đồ động cho một vị trí cụ thể.

Hướng dẫn được tìm thấy trên http://joshclemm.com/blog/?p=86 cho biết cách thực hiện nếu TabHost chứa chế độ xem bản đồ và chế độ xem danh sách. Nếu một mục trong ListView được nhấp, TabHost sẽ chuyển sang chế độ xem bản đồ và hoạt ảnh cho vị trí đó (các tọa độ đó). Đây chính xác là những gì tôi cần làm khi nhấn nút trong hoạt động riêng biệt.

Các MainView.java được tạo ra như sau:

public class MainView extends TabActivity implements OnTabChangeListener{ 
@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 

intent = new Intent().setClass(this, MapGUI.class); 
    spec = tabHost.newTabSpec("map").setIndicator("Map", 
         res.getDrawable(R.drawable.ic_tab_menu_item)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, MissionView.class); 
    spec = tabHost.newTabSpec("mission").setIndicator("Mission", 
         res.getDrawable(R.drawable.ic_tab_menu_item)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, SIPView.class); 
    spec = tabHost.newTabSpec("call").setIndicator("Call", 
         res.getDrawable(R.drawable.ic_tab_menu_item)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

Các MissionView.java là như sau:

public class MissionView extends Activity implements Observer{ 

MissionController mc; 
private TextView missionheader, missiondescription, missionaddress, 
missiontime, missioninjuries; 
private Button changedesc, gotoadress; 
private String[] mission; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.missiontablayout); 
    missionheader = (TextView)findViewById(R.id.missionheader2); 
    missiondescription = (TextView)findViewById(R.id.missiondescription2); 
    missionaddress = (TextView)findViewById(R.id.missionaddress2); 
    missiontime = (TextView)findViewById(R.id.missiontime2); 
    missioninjuries = (TextView)findViewById(R.id.missioninjuries2); 

    changedesc = (Button)findViewById(R.id.gotoaddress); 
    changedesc.setOnClickListener(new OnClickListener() {   
     public void onClick(View v) { 
     // DO SOMETHING HERE?    
     } 
    }); 
    mc = new MissionController(MissionView.this); 
} 

public void update(Observable observable, Object data) { 
    if(data instanceof String[]){ 
     mission = (String[]) data; 
     updateView(mission); 
    } 
} 
public void updateView(String[] missiontext){ 
    missionheader.setText(missiontext[0]); 
    missiondescription.setText(missiontext[1]); 
    missionaddress.setText(missiontext[2]); 
    missiontime.setText(missiontext[3]); 
    missioninjuries.setText(missiontext[4]); 
} 

}

Bất cứ ai cũng biết làm thế nào tôi có thể đạt được điều này? Lưu ý rằng mã được cung cấp ở trên không thực hiện để thực sự vẽ đến vị trí thực tế, nhưng câu hỏi vẫn còn, làm cách nào để thực hiện một nút được nhấn trong một hoạt động để chuyển tab trong TabHost và kích hoạt thay đổi trên tab đó Hoạt động?

Trả lời

0

thay đổi các tab trong một TabHost có thể dễ dàng được thực hiện với setCurrentTab(int) http://developer.android.com/reference/android/widget/TabHost.html#setCurrentTab(int)

gửi các sự kiện để hoạt động khác chỉ đơn giản là có thể đạt được bằng cách gửi một ý định phát sóng và nhận/xử lý nó trong Activity khác.

Hoặc bạn có thể lưu tham chiếu tĩnh vào tất cả hoạt động tab (xấu xí ...) và gọi phương thức trực tiếp.

0

Nơi dòng dưới đây vào nút nhấp vào nơi bạn muốn chuyển sang hoạt động Bản đồ

((MainView) getParent()).setTabMap(); 

và trong MainView tạo hàm sau

public void setTabMap() 
{ 
    //as Map activity is your first tab so pass 0 as index 
    getTabHost().setCurrentTab(0); 
} 
Các vấn đề liên quan