6

tôi đang cố gắng ra trên thanh hành động android cho 3.0, nơi tôi tham khảoAndroid Tab Action Bar

http://www.youtube.com/watch?v=gMu8XhxUBl8

Mã trong TabsActivity như sau:

package com.test.actionbar; 

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 

public class TabsActivity extends Activity{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab tabA = bar.newTab().setText("A Tab"); 
    ActionBar.Tab tabB = bar.newTab().setText("B Tab"); 
    ActionBar.Tab tabC = bar.newTab().setText("C Tab"); 

    Fragment fragmentA = new AFragmentTab(); 
    Fragment fragmentB = new BFragmentTab(); 
    Fragment fragmentC = new CFragmentTab(); 

    tabA.setTabListener(new MyTabsListener(fragmentA)); 
    tabB.setTabListener(new MyTabsListener(fragmentB)); 
    tabC.setTabListener(new MyTabsListener(fragmentC)); 

    bar.addTab(tabA); 
    bar.addTab(tabB); 
    bar.addTab(tabC); 

} 

protected class MyTabsListener implements ActionBar.TabListener { 

    private Fragment fragment; 

    public MyTabsListener(Fragment fragment) { 
     this.fragment = fragment; 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     ft.add(R.id.fragment_container, fragment, null); 

    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 
    } 
} 

cho một hướng dẫn từng bước, tuy nhiên, sau khi hoàn thành hướng dẫn, tôi nhận ra rằng trong TabsActivity, trong phương thức onTabSelected, nó sẽ yêu cầu một biến là container_id, mà tôi không chắc chắn làm thế nào tôi có thể cung cấp mà ngay cả sau khi nhìn vào api. Tôi đã cố gắng loại bỏ các dòng và chạy nó trên máy tính bảng nhưng nó ném cho tôi một runtimeexception.

Có ai có thể giúp tôi với điều này không?

xin lỗi, tôi là người mới lập trình Android, nếu câu hỏi có vẻ quá đơn giản.

Xin cảm ơn trước.

EDIT

import android.app.ActionBar; 
import android.app.Activity; 
import android.app.Fragment; 
import android.os.Bundle; 

public class ActionBarTabs extends Activity { 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab tabA = bar.newTab().setText("A Tab"); 
    ActionBar.Tab tabB = bar.newTab().setText("B Tab"); 
    ActionBar.Tab tabC = bar.newTab().setText("C Tab"); 

    bar.addTab(tabA); 
    bar.addTab(tabB); 
    bar.addTab(tabC); 
    } 
} 

CẬP NHẬT

package com.debug.actionbartabs; 

import android.app.ActionBar; 
import android.app.Activity; 
import android.os.Bundle; 

public class TabsActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab tabA = bar.newTab().setText("A Tab"); 
    bar.addTab(tabA); 

    } 
} 

Trả lời

12

Mỗi phòng trong số các lớp học sẽ giống như sau:

public class AFragmentTab extends Fragment 
{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
    return inflater.inflate(R.layout.fragment_a, container, false); 
    } 
} 

Và các hoạt động chính sẽ trông như thế này:

package com.test.actionbar; 

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 

public class TabsActivity extends Activity{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    ActionBar.Tab tabA = bar.newTab().setText("A Tab"); 
    ActionBar.Tab tabB = bar.newTab().setText("B Tab"); 
    ActionBar.Tab tabC = bar.newTab().setText("C Tab"); 

    Fragment fragmentA = new AFragmentTab(); 
    Fragment fragmentB = new BFragmentTab(); 
    Fragment fragmentC = new CFragmentTab(); 

    tabA.setTabListener(new MyTabsListener(fragmentA)); 
    tabB.setTabListener(new MyTabsListener(fragmentB)); 
    tabC.setTabListener(new MyTabsListener(fragmentC)); 

    bar.addTab(tabA); 
    bar.addTab(tabB); 
    bar.addTab(tabC); 

} 

protected class MyTabsListener implements ActionBar.TabListener { 

    private Fragment fragment; 

    public MyTabsListener(Fragment fragment) { 
     this.fragment = fragment; 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.add(R.id.fragment_container, fragment, null); 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // some people needed this line as well to make it work: 
     ft.remove(fragment); 
    } 
} 

Tôi chỉ tìm thấy bản sao của mã của mình ở đây: http://www.abelski.com/courses/android3ui/actionbar.pdf> _ < Vì vậy, trong main.xml trông như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<LinearLayout android:layout_height="wrap_content" 
android:layout_width="match_parent" 
android:id="@+id/fragment_container"></LinearLayout> 
</LinearLayout> 
+0

@Jonathon Hồ nhờ trả lời của bạn. tôi có giả sử khai báo id ở đâu đó không? bởi vì tôi không quá chắc chắn nơi tôi nên làm nó. tôi đã đọc qua hướng dẫn của nhà phát triển, nhưng vẫn không thể nắm bắt được khái niệm. bạn có phiền nếu bạn có thể hướng dẫn tôi đến nơi tôi nên thêm những thứ như vậy mà tôi có thể có nó làm việc? –

+0

Ồ tôi đã chỉnh sửa nó ngay bây giờ oops. Tôi khá chắc chắn rằng bạn đặt id trong tập tin xml mảnh của bạn. Các mảnh có thể được đọc ở đây: http://developer.android.com/reference/android/app/Fragment.html Nhưng vâng, nó nằm trong bất kể bạn đặt tên cho id của mình . Nó được chuyển tới R.java được tạo tự động để bạn có thể sử dụng nó trong mã Java của mình. Bạn đã thử tạo biểu mẫu android chưa bằng Chế độ xem XML chưa? Nó sẽ tương tự như vậy. – rawreth

+0

@ Jonathan Hồ tôi đã thử sử dụng bố cục xml trước đây, nhưng lần này, nó tiếp tục nhận được lỗi như không thể tham chiếu đến lớp, mà tôi đã thay đổi thành lớp, nhưng nó bị ghi đè mọi thứ tôi làm. –

Các vấn đề liên quan