1

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>
4

2 に答える 2

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最初にのアイテムに使用するレイアウトと、そのレイアウトからの id を指している場所。使用してTextViewいる場合

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

レイアウトにはTextViewid が必要です:android:id/textView1

于 2013-07-16T11:17:32.677 に答える
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"
于 2013-07-17T00:37:25.190 に答える