1

スピナーに値を選択するのに問題があります。これが私のコードとアダプターです。

スピナーイベントリスナー

category = (Spinner) findViewById(R.id.Spinner);
category.setPrompt("Select Category..");
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();                                     
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("Category", "Choose a Category");
list.add(map);

map = new HashMap<String, Object>();
map.put("Icon", R.drawable.icon1);
map.put("Category", "Category1");
list.add(map);

map = new HashMap<String, Object>();
map.put("Icon", R.drawable.icon2);  
map.put("Category", "Category2");                                                                       
list.add(map);

map = new HashMap<String,Object>();
map.put("Icon", R.drawable.icon3);
map.put("Category", "Category3");                                                                               
list.add(map);
CategoryAdapter adapter = new CategoryAdapter(v.getContext(), list,R.layout.list_layout, new String[] { "Category", "Icon" }, new int[] { R.id.category, R.id.icon });
category.setAdapter(adapter);   

category.setOnItemSelectedListener(new OnItemSelectedListener(){

@Override
public void onItemSelected(AdapterView<?> arg0,View v, int arg2,long arg3) {
    // TODO Auto-generated method stub
    String selected = category.getSelectedItem().toString();
    //String selected = category.getTag().toString();
    try{
        //String selected = category.getSelectedItem().toString();
        //Object selected = arg0.getTag();
        //Toast.makeText(getApplicationContext(), String.valueOf(selected), Toast.LENGTH_SHORT).show();
        if(selected.toString().equals("Category1")){
            String msg1 = "Category1 type selected";
            Toast.makeText(getApplicationContext(), msg1 + " " + selected, Toast.LENGTH_SHORT).show();
        }else if(selected.toString().equals("Category2")){
            String msg2 = "Category2 type selected";
            Toast.makeText(getApplicationContext(), msg2 +  " " + selected, Toast.LENGTH_SHORT).show();
        }else if(selected.toString().equals("Category3")){
            String msg3 = "Category3 type selected";
            Toast.makeText(getApplicationContext(), msg3 + " " + selected, Toast.LENGTH_SHORT).show();
        }
    }catch(Exception e){
        Toast.makeText(getApplicationContext(),"Error occured " + e.getName().getClass(), Toast.LENGTH_SHORT).show();
    }                                                                                               
}

@Override
public void onNothingSelected(
        AdapterView<?> arg0) {
    // TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(), "nothing selected", Toast.LENGTH_SHORT).show();
}

});

CategoryAdapter

public class ReminderCategoryAdapter extends SimpleAdapter{

    Context c;

    public ReminderCategoryAdapter(Context context, List<? extends Map<String, ?>> data,
            int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        c = context;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            LayoutInflater li = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = li.inflate(R.layout.list_layout,null);
        }

        HashMap<String, Object> data = (HashMap<String, Object>) getItem(position);

        ((TextView) convertView.findViewById(R.id.category)).setText((String) data.get("Category"));
        ((TextView) convertView.findViewById(R.id.category)).setTag((Object) data.get("Category"));

        return convertView;
    }
}

スピナーの場合、アダプターで画像とテキストを膨らませます。スピナーは正常に機能しています。ここでスピナーを説明します。

============================

| Icon1 Text1 |

| Icon2 Text2 |

| Icon3 Text3 |

しかし、onitemselectedlistenerを使用してgetSelectedItem()。toString()メソッドを使用してトーストすると、トーストで返される値はアイコンとテキストの組み合わせになります。アイコンの値が返されることは望ましくありませんが、文字列またはテキストのみが必要です。((TextView)convertView.findViewById(R.id.category))。setTag((Object)data.get( "Category"));を使用してsetTag(Object value)メソッドを使用してみました。アダプタで、リスナーでgetTag()メソッドを使用すると、nullpointer例外がスローされました。getItemPosition(position)またはgetSelectedItem()メソッドを使用する代わりに、選択したアイテムの文字列値を取得および操作する他のソリューションはありますか?助けてください。

4

1 に答える 1

2

簡単に使用できる解決策の1つは、Spinner#getSelectedItemPosition()メソッドを使用することです。このメソッドは、選択されたアイテムの位置を返し、アダプターに渡すリストからアイテム自体を取得できます。

したがって、基本的に、onItemSelectedメソッドの次の行を置き換えます。

String selected = category.getSelectedItem().toString();

と:

String selected = list.get(category.getSelectedItemItemPosition()).get("Category");
于 2011-11-03T01:08:18.753 に答える