0

Textviewから膨らませることは可能@android:id/text1ですか?独自のレイアウトを作成したくありません。テキストを少し変更したいだけです。

これが私のコードです:

まず、データを格納する変数を作成しました

private List<HashMap<String, String>> dataCities = new ArrayList<HashMap<String, String>>();
//Hashmap with keys and values
//id - 0
//name - default

次に、onCreate でカスタム アダプターを作成しました

@Override
protected void onCreate(Bundle savedInstanceState) {
//...
Spinner citiesSpinner = (Spinner) findViewById(R.id.city_sp);
citiesAdapter = new CustomArrayAdapter(this, R.layout.sherlock_spinner_item, dataCities);
citiesSpinner.setAdapter(citiesAdapter);
}

3 番目に、リスナーを作成しました。動作しますが、notifyDataSetChanged を呼び出した後は何も起こりません。なんで?

@Override
public void onRequestJsonResponded(RequestType type, JSONArray array) {
    //my enum type
    switch (type) {
        case cities:
            //returns hashmap in arraylist, ArrayList<HashMap<String,String>> ...
            dataCities = parseJSonArray(array);
            Log.d(TAG, "End of parsing");
            citiesAdapter.notifyDataSetChanged();
            break;
        case mark:
            //...
            break;
        case model:
            break;
    }
}

これが私のカスタムarrayadapterです

private class CustomArrayAdapter extends ArrayAdapter<HashMap<String, String>> {

    public CustomArrayAdapter(Context context, int textViewResourceId, List<HashMap<String, String>> objects) {
        super(context, textViewResourceId, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater layoutInflater = LayoutInflater.from(getContext());
        View v = layoutInflater.inflate(R.layout.sherlock_spinner_item, null);
        TextView tv = (TextView)v.findViewById(android.R.id.text1);
        tv.setText(getItem(position).get("name"));

        return v;

    }

}

空白のスピナー データを取得する理由を誰か教えてもらえますか? (スピナーは空です)。また、新しいレイアウトを作成せずにテキストを変更するにはどうすればよいですか? シャーロック スピナーのアイテム レイアウトを使いたいだけです。助けてください。

4

1 に答える 1

0

簡単です。アダプターのリストは、取得したリストと同じではありません。

        //In here you update your activity's list to the returned values
        dataCities = parseJSonArray(array);
        Log.d(TAG, "End of parsing");
        //But the adapter is using the original value of dataCities (new ArrayList<HashMap<String, String>>() )
        citiesAdapter.notifyDataSetChanged();

アダプターは ArrayAdapter に依存しているため、最も簡単な解決策は、データを受信したときに新しいアダプターを作成することです。

于 2013-05-19T21:42:52.767 に答える