0

JSONデータからアイテムを設定するアクティビティにスピナーがあり、スピナーからアイテムを選択してスピナーに設定すると、これらすべてを適切に実行しました.しかし、スピナーから選択したアイテムを削除したい場合、例外が発生しました:

E/AndroidRuntime(1022): java.lang.UnsupportedOperationException"

E/AndroidRuntime(1022):atandroid.widget.ArrayAdapter.remove(ArrayAdapter.java:212)

のコード行で

E/AndroidRuntime(1022): com.spinnerdemo.SpinDemo$1.onItemSelected(SpinDemo.java:102) で

これが私のコードです:

public class SpinDemo extends Activity {

    private static String strUrl = "http://192.168.1.61/jyoti/android_app/all_questions.php";
    private static String TAG_ID = "id";
    private static String TAG_CODE = "q_prefix";
    private static String TAG_CODE_ARR = "Questions";

    JSONArray jsonArray = null;
    Spinner codeSpinner, spinner2;
    EditText edTextSpinnerItem;
    String[] items;

    String strEdtext;
    String strid , strcode ;
    ArrayList<String> codeList;
    public  ArrayAdapter<String> adapter ;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        codeList = new ArrayList<String>();
        codeSpinner = (Spinner) findViewById(R.id.spinner2);

        JSONParser jParser = new JSONParser();
        JSONObject json = jParser.getJSONFromUrl(strUrl);
        try
        {
            jsonArray = json.getJSONArray(TAG_CODE_ARR);

             // looping through All Contacts
             final String[] items = new String[jsonArray.length()];

             for(int i = 0; i < jsonArray.length(); i++)
             {
                 JSONObject c = jsonArray.getJSONObject(i);

                // Storing each json item in variable

                    strid = c.getString(TAG_ID);
                    strcode = c.getString(TAG_CODE);
                    items[i] = c.getString(TAG_CODE);
                    System.out.println("Hello events " + items);        

                    adapter = new ArrayAdapter<String>(this,
                            android.R.layout.simple_spinner_item,items);
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    codeSpinner.setAdapter(adapter);

             }
        }

        catch (JSONException e) {
            e.printStackTrace();
        }


        codeSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
        {


            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int pos, long arg3)
            {
                // TODO Auto-generated method stub

                String anyvariable=String.valueOf(codeSpinner.getSelectedItem());
                System.out.println("anyvariable = " + anyvariable);
                edTextSpinnerItem=(EditText)findViewById(R.id.editText_SpinnerItem);
                edTextSpinnerItem.setText(anyvariable);
                System.out.println("edTextSpinnerItem " + edTextSpinnerItem);


                String t = adapter.getItem(pos);
                System.out.println("Get The Item Position From Adapter = " + t);




                adapter.remove(t);
                adapter.notifyDataSetChanged();
                codeSpinner.setAdapter(adapter);
                //mySpinner.setAdapter(m_adapterForSpinner);

                //adapter.remove((String)codeSpinner.getSelectedItem());
                //adapter.notifyDataSetChanged();
                //System.out.println("Item is Removed From The Spinner Drop Dwon List");



            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) 
            {
                // TODO Auto-generated method stub

            }
        });

    }



}
4

2 に答える 2

0

問題は、実際に選択されている要素を削除することから発生していると思います項目に配列の代わりにリストを使用してみてください: http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter (android.content.Context,%20int,%20int,%20java.util.List )

次に、選択した項目で使用します

items.remove(t);

それ以外の:

adapter.remove(t);

この変更により、アダプターからではなく、ArrayList(List) からアイテムを削除します。アダプター notifyDataSetChanged は、リストの変更をキャプチャし、スピナーを更新します

于 2013-11-12T11:48:45.933 に答える
0

これを試して..

1)ループspinner setadapter後に与えるfor

2) アイテムを削除する必要がある場合。それを使用する必要ArrayListがあるのは簡単な方法です。

いくつかの変更後にコードを投稿しました。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        codeList = new ArrayList<String>();
        codeSpinner = (Spinner) findViewById(R.id.spinner2);

        JSONParser jParser = new JSONParser();
        JSONObject json = jParser.getJSONFromUrl(strUrl);
        try
        {
            jsonArray = json.getJSONArray(TAG_CODE_ARR);

             // looping through All Contacts
             final String[] items = new String[jsonArray.length()];

             for(int i = 0; i < jsonArray.length(); i++)
             {
                 JSONObject c = jsonArray.getJSONObject(i);

                // Storing each json item in variable

                    strid = c.getString(TAG_ID);
                    strcode = c.getString(TAG_CODE);
                    items[i] = c.getString(TAG_CODE);
                    System.out.println("Hello events " + items);  
                    codeList.add(strcode);

             }

adapter = new ArrayAdapter<String>(this,
                            android.R.layout.simple_spinner_item,codeList);
                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    codeSpinner.setAdapter(adapter);
        }

        catch (JSONException e) {
            e.printStackTrace();
        }


        codeSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
        {


            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int pos, long arg3)
            {
                // TODO Auto-generated method stub

                String anyvariable=String.valueOf(codeSpinner.getSelectedItem());
                System.out.println("anyvariable = " + anyvariable);
                edTextSpinnerItem=(EditText)findViewById(R.id.editText_SpinnerItem);
                edTextSpinnerItem.setText(anyvariable);
                System.out.println("edTextSpinnerItem " + edTextSpinnerItem);


                String t = adapter.getItem(pos);
                System.out.println("Get The Item Position From Adapter = " + t);



                Object t2 = adapter.getItem(pos);
        Log.v("t2", ""+t2);
        codeList.remove(t2);
        adapter.notifyDataSetChanged();


            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) 
            {
                // TODO Auto-generated method stub

            }
        });

    }
于 2013-11-12T12:12:22.943 に答える