6

我的Android操作欄上嘗試爲3.0,在這裏我指的Android的標籤操作欄

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

TabsActivity的代碼如下:

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 

    } 
    } 
} 

瞭然而,在完成本教程後,我意識到在TabsActivity中,在onTabSelected方法中,它需要一個變量,它是container_id,我不太確定,即使在查看API。我試圖刪除線,並在平板電腦上運行它,但它引發了我的runtimeexception。

任何人都可以幫助我嗎?

對不起,我是新來的android編程,如果這個問題聽起來太簡單了。

在此先感謝。

編輯

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); 
    } 
} 

UPDATE

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); 

    } 
} 

回答

12

每個類的應該是這樣的:

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

和主要活動應該是這樣的:

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); 
    } 
} 

我才發現他的代碼複製在這裏:http://www.abelski.com/courses/android3ui/actionbar.pdf> _ < 所以在main.xml中看起來是這樣的:

<?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何感謝您的回覆。我想在某處宣佈身份證嗎?因爲我不太確定我應該在哪裏做。我已閱讀開發人員指南,但仍無法掌握概念。你介意,如果你能指導我到哪裏我應該添加的東西,我可以讓它工作? –

+0

哦,我現在編輯它只是哎呀。我很確定你把你的分片xml文件中的id。片段可以在這裏閱讀:http://developer.android.com/reference/android/app/Fragment.html但是,它是在<片段android:id =「@ + id/___」>無論你什麼名字你的ID 。它被傳遞給自動生成的R.java,以便在Java代碼中使用它。您是否嘗試過使用XML Views製作Android表單?它應該與此類似。 – rawreth

+0

@Jonathan Ho我以前曾嘗試過使用xml佈局,但是這一次,它不斷引發類似於無法引用類的錯誤,我將其更改爲正確的類,但它會覆蓋我所做的所有事情。 –