8

リストビューに 1 行あたり 3 つのテキストビューを設定するカスタム アダプターの作成を検討しています。これを行うためのコード例をかなり見つけましたが、最も良いと思われるコードはhttp://www.anddev.org/custom_widget_adapters-t1796.htmlにありました。

最新の Android SDK でいくつかのコンパイラの問題を修正するためにいくつかのマイナーな調整を行った後、例外を取得するためだけに実行しました。

エラー/AndroidRuntime(281): java.lang.UnsupportedOperationException: addView(View, LayoutParams) は AdapterView でサポートされていません

そのため、私は多くの調査を行い、これについて考えられる多くの理由と修正を見つけました。どれも物事を変えませんでした。私のアダプターコードは現在:

public class WeatherAdapter extends BaseAdapter {

    private Context context;
    private List<Weather> weatherList;

    public WeatherAdapter(Context context, int rowResID,
                        List<Weather> weatherList ) { 
        this.context = context;
        this.weatherList = weatherList;
    }

    public int getCount() {                        
        return weatherList.size();
    }

    public Object getItem(int position) {     
        return weatherList.get(position);
    }

    public long getItemId(int position) {  
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) { 
        Weather weather = weatherList.get(position);

        //LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LayoutInflater inflater = LayoutInflater.from(context);

        View v = inflater.inflate(R.layout.weather_row, null, true);
        TextView cityControl = (TextView)v.findViewById( R.id.city );
        TextView temperatureControl = (TextView)v.findViewById( R.id.temperature );
        ImageView skyControl = (ImageView)v.findViewById( R.id.sky );
        return v;
    }

}

そのため、インフレータを取得するコメントアウトされた方法と、現在コメントアウトされていない方法を試しました。null だけでなく "parent" を inflate に渡し、"true"、"false" を渡し、最後のパラメーターを完全に省略しようとしました。それらのどれも機能していません。これまでに見つけたすべての例は 2008 年のもので、少し時代遅れだと感じています。

誰かがこれを手伝ってくれるなら、私は問題を解決したいと思っています.

4

4 に答える 4

16

この行に問題があると思います:

View v = inflater.inflate(R.layout.weather_row, null, true);

代わりに次のものが必要です。

View v = inflater.inflate(R.layout.weather_row, parent, false);

false は、インフレートされたビューを親から独立させ、親にアタッチされないようにしますAdapterView。なぜそうなのか、私はまったく困惑していますが、上記のパターンはうまくいきました。

于 2011-06-21T02:01:04.700 に答える
6

私も初心者なので、この回答を少し塩で取ってください。うまくいかない場合は、先に進んで、さらにGoogleで検索してください。AdapterView私は伝統的にListVieworGridViewとカスタム Adapter をBaseAdapterand thenから拡張しているため、 に慣れていませんlistView.setAdapter(myCustomAdapter)

WeatherAdapterクラス内で次のようなものを作成してみてください。

public void addToList(Weather mWeather) {
    weatherList.add(mWeather);
}

次に、を呼び出すクラスでWeatherAdapter

weatherAdapter.addToList(weatherToAdd);
weatherAdapter.notifyDataSetChanged();

また、getView メソッドでさらに最適化する必要があります。

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

于 2011-01-19T03:49:28.753 に答える
3

メソッドのAdaptertView addView場合:

void addView(子を表示)

このメソッドはサポートされておらず、呼び出されたときに UnsupportedOperationException をスローします。" (Android ドキュメントより)

おそらく、膨張手順はメソッドを呼び出しますが、これは、またはそのaddViewからは不可能です。AdapterViewAdapterView

ドキュメントから:

「Adapter オブジェクトは、AdapterView とそのビューの基になるデータとの間のブリッジとして機能します。Adapter は、データ項目へのアクセスを提供します。Adapter は、データ セット内の各項目のビューを作成する役割も担います。」.

インフレ操作は、ビューと他のすべての操作をモデル化する単純なアクティビティから実行できると思います。たとえば、データの取得や他のクラスのデータの表示などです。

それが役立つことを願っています!

于 2011-05-28T13:17:28.747 に答える