2013-05-01 139 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