2013-05-01 193 views
0

有誰知道該怎麼做這個片段選項卡問題?片段選項卡奇怪的崩潰

我是一個很沒經驗的新手程序員,特別是在Android應用程序開發的世界。我最近開始片段選項卡的項目,我發現,當我試圖訪問一個對象(因爲缺乏一個更好的詞,但我的意思是像一個TextView,微調,EditText上,等)類似

TextView textBox = (TextView) getView().findViewById(R.id.scouter_name_box); 

編譯器發現沒有錯誤,但應用程序崩潰。我試圖將這一行代碼放在一個函數中,在片段的本體中(在onCreate()之後)和onCreate()的末尾。這沒有幫助。錯誤日誌也沒有說什麼。

此外,當我註釋掉這一行時,應用程序的其餘部分無縫運行。該應用沒有任何其他活動,除了MainActivity和三個選項卡片段。

我能做些什麼來訪問TEXTVIEWS,SPINNERS等?

也如我所說我很新。如果你需要更好的解釋,請問,如果我一開始不明白你的意思,我很抱歉。

我們都必須開始某處

請幫幫忙, 並預先感謝您

標籤XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView android:id="@+id/input_scouter_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:text="Scouter Name:" 
     android:textSize="25sp" 
     android:textStyle="bold" /> 

    <Spinner android:id="@+id/choose_scouter_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@+id/input_scouter_name" 
     android:entries="@array/scouter_name_list" /> 

</RelativeLayout> 

MainActivity Java文件:

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

public class MainActivity extends Activity { 
    // Declare Tab Variable 

    Tab tab; 
    ScoutingData ScoutData; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Create the actionbar 
     ActionBar actionBar = getActionBar(); 

     // Hide Actionbar Icon 
     actionBar.setDisplayShowHomeEnabled(true); 
     actionBar.setIcon(R.drawable.red_and_blue_frisbees); 

     // Hide Actionbar Title 
     actionBar.setDisplayShowTitleEnabled(true); 

     // Create Actionbar Tabs 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // Create Home Tab 
     tab = actionBar.newTab().setTabListener(new FragmentsTab0()); 
     // Set Tab Title 
     tab.setText("General"); 
     actionBar.addTab(tab); 

     // Create first Tab 
     tab = actionBar.newTab().setTabListener(new FragmentsTab1()); 
     // Set Tab Title 
     tab.setText("Autonomous"); 
     actionBar.addTab(tab); 

     // Create Second Tab 
     tab = actionBar.newTab().setTabListener(new FragmentsTab2()); 
     // Set Tab Title 
     tab.setText("Teleop"); 
     actionBar.addTab(tab); 

     // Create Third Tab 
     tab = actionBar.newTab().setTabListener(new FragmentsTab3()); 
     // Set Tab Title 
     tab.setText("Endgame"); 
     actionBar.addTab(tab); 
    } 
} 

標籤Java文件:

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.widget.Spinner; 

public class FragmentsTab0 extends Fragment implements ActionBar.TabListener { 

    private Fragment mFragment; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Get the view from tab0fragment.xml 
     getActivity().setContentView(R.layout.tab0fragment); 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     mFragment = new FragmentsTab0(); 
     // Attach tab0fragment.xml layout 
     ft.add(android.R.id.content, mFragment); 
     ft.attach(mFragment); 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 
     // Remove tab0fragment.xml layout 
     ft.remove(mFragment); 
    } 

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

    //Heeere's the Problem 
    Spinner scouterName = (Spinner) getView().findViewById(R.id.choose_scouter_name); 
} 

回答

0

首先,刪除Spinner scoutername = (Spinner) getView().findViewById(R.id.choose_scouter_name)。其次,從onCreate()刪除getActivity().setContentView(R.layout.tab0fragment);。您想要在onCreateView之內膨脹xml,然後使用該視圖獲取其他視圖的ID。例如:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View view; 

     if (container == null) { 

      return null; 
     } 

     view = inflater.inflate(R.layout.tab0fragment, container, false); 
     Spinner scouterName = (Spinner) view.findViewById(R.id.choose_scouter_name); 
} 
+0

我假設我用這個新的onCreateView()函數替換我的onCreate()函數?在其他功能之後,我也擺脫了片段主體中的Spinner調用。我導入了所有新的必要項目,但仍然出現「nomap」(來自R.layout.nomap)不是字段的錯誤。有沒有修復或我可以用什麼替換?但感謝您的幫助。 – Live2Code 2013-05-02 21:04:01

+0

是的。刪除你的onCreate()方法,並用我的onCreateView()方法替換它。而關於nomap的錯誤是我的錯。我已經用適當的代碼更新了這篇文章。 – 2013-05-02 21:58:56

+0

當我嘗試此代碼時,出現錯誤_「此方法必須返回類型視圖的結果」_。如果它意味着什麼,我已經添加了我的MainActivity代碼。但是,我也注意到'if(container == null)'你返回null。但方法是鍵入View。它不應該在任何時候返回一個視圖?也許在'view = inflater.inflate(R.layout.tab0fragment,container,false)之後''但無論如何感謝 – Live2Code 2013-05-05 17:46:16