用于微调器的arrayadapter不在片段中工作,需要资源ID

时间:2013-07-16 11:14:02

标签: android android-arrayadapter

我收到的错误是ArrayAdapter没有资源ID,但是这里使用了资源ID,我在一个活动中使用了类似的代码而没有问题,但这是在一个片段中。有什么我应该做的不同,因为它是在一个片段?这就是为什么它不起作用?

我制作了一个xml布局,并根据需要在其中放置了一个textView。

关于如何使其发挥作用的任何想法?

堆栈跟踪

 07-16 20:11:44.290: E/AndroidRuntime(14278): FATAL EXCEPTION: main
 07-16 20:11:44.290: E/AndroidRuntime(14278): java.lang.IllegalStateException:   ArrayAdapter requires the resource ID to be a TextView
 07-16 20:11:44.290: E/AndroidRuntime(14278):   at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
 07-16 20:11:44.290: E/AndroidRuntime(14278):   at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)

片段中的oncreateview方法。所有操作都是

的方法
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View result=inflater.inflate(R.layout.small_tank_layout11, container, false);

        activity = getActivity();

         // set shared preferences variable with shared preferences object for use
        prefs = activity.getSharedPreferences("smallTankPreferences", Context.MODE_PRIVATE);

        textViewOne = (TextView) result.findViewById(R.id.textView1);
        textViewTwo = (TextView) result.findViewById(R.id.textView2);
        spinnerOne = (Spinner) result.findViewById(R.id.spinner1);
        buttonOne = (Button) result.findViewById(R.id.button1);

        // get stored title quesion and set text
        smallTank11question = prefs.getString("smallTank11question", "");
        textViewOne.setText(smallTank11question);

        // get arraylist from json string
        Gson gson = new Gson();
         Type type = new TypeToken<ArrayList<String>>(){}.getType();
         smallTank11WeatherNames = prefs.getString("smallTank11WeatherNames", "");
         smallTank11WeatherNamesArray = gson.fromJson(smallTank11WeatherNames, type);

         // get the weather selected indicator stored in shared prefereces
         smallTank11WeatherSelected = prefs.getInt("smallTank11WeatherSelected", -1);

    //put strings of weather selections into spinner
       ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, smallTank11WeatherNamesArray);  // layout for spinner itself
        dataAdapter.setDropDownViewResource(R.layout.small_tank_spinnerlayout_one); // layout for spinner dropdown items
        spinnerOne.setAdapter(dataAdapter);


        return result;

    } // end oncreateview

在这里编辑我添加了small_tank_spinnerlayout_one.xml的代码

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

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

2 个答案:

答案 0 :(得分:2)

在这一行:

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, smallTank11WeatherNamesArray);

您应该指出要在布局中使用哪个TextView。为此您应该像这样创建ArrayAdapter

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, R.id.textView1, smallTank11WeatherNamesArray);

您首先指出用于Spinner项目的布局以及该布局中TextView的ID。如果您正在使用

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, smallTank11WeatherNamesArray);

您的布局应为TextView,ID为android:id/textView1

答案 1 :(得分:1)

我找到了为什么arrayAdapter无法正常工作的答案。

首先,ArrayAdapter代码本身是正确的,不需要进行任何更改

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(activity, R.layout.small_tank_spinnerlayout_one, smallTank11WeatherNamesArray);  // layout for spinner itself
    dataAdapter.setDropDownViewResource(R.layout.small_tank_spinnerlayout_one); // layout for spinner dropdown items
    spinnerOne.setAdapter(dataAdapter);

问题出现在用于填充微调器中的视图的xml文件中,small_tank_spinnerlayout_one.xml,在此文件中有一个封闭在linearLayout内部的textView,如果你在我发布的问题中看到上面的内容你可以看到xml文件的代码。这就是导致错误的原因。

我通过从xml文件中删除linearLayout来更改代码,因此文件中的唯一代码用于textView,如下所示,现在可以正常工作。

经验教训,对于我正在使用的此版本的ArrayAdapter,您无法将textView包含在任何类型的布局中。

 <?xml version="1.0" encoding="utf-8"?>
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/textView1"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content" 
     android:padding="20dp"
     android:textSize="14pt"     
     android:gravity="center"
 />

此外,您不必为textView命名,因为我删除了下面显示的这一行,但它仍然可以使用

 android:id="@+id/textView1"