How to implement add element in spinner array adapter in android

I had an EditText, button and counter. When you click on the button, the counter will add a new element with the name you entered in EditText. But here is the question, my adapter.add () method seems to not work ... here is my code:

  bt1 = (Button)this.findViewById(R.id.AddBtn);
            et = (EditText)this.findViewById(R.id.newSpinnerItemText);  
            spinner = (Spinner)this.findViewById(R.id.dynamicSpinner);

            adapter = ArrayAdapter.createFromResource(
                    this, R.array.simple_from_length, android.R.layout.simple_spinner_item);

            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

            spinner.setAdapter(adapter);

            bt1.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    String temp = et.getText().toString();

                    adapter.add(temp);
                //    adapter.notifyDataSetChanged();
                    spinner.setAdapter(adapter);

                }
            });

error of this file:

02-27 18:01:17.728: ERROR/AndroidRuntime(1982): java.lang.UnsupportedOperationException
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at java.util.AbstractList.add(AbstractList.java:410)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at java.util.AbstractList.add(AbstractList.java:432)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.widget.ArrayAdapter.add(ArrayAdapter.java:178)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at org.example.SpinnerKiran.SpinnerKiran$1.onClick(SpinnerKiran.java:56)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.view.View.performClick(View.java:2179)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.view.View.onTouchEvent(View.java:3828)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.widget.TextView.onTouchEvent(TextView.java:6291)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.view.View.dispatchTouchEvent(View.java:3368)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.app.Activity.dispatchTouchEvent(Activity.java:1993)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1525)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.os.Looper.loop(Looper.java:123)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at android.app.ActivityThread.main(ActivityThread.java:3948)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at java.lang.reflect.Method.invokeNative(Native Method)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at java.lang.reflect.Method.invoke(Method.java:521)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):     at dalvik.system.NativeStart.main(Native Method)
+3
source share
3 answers

The ArrayAdapter is already list-based, so you don’t need to create your own adapter to use List. However, it uses the list or array with which it is created. It does not copy items to the new list. If you give an array with a fixed length, then you cannot add or remove members.

. , , Arrays.asList(), , .

        spinner = (Spinner)this.findViewById(R.id.dynamicSpinner);
        CharSequence[] itemArray = 
                getResources().getTextArray(R.array.simple_from_length);
        List<CharSequence> itemList = 
                new ArrayList<CharSequence>(Arrays.asList(itemArray));

        adapter = new ArrayAdapter(this, 
                android.R.layout.simple_spinner_item,
                itemList);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinner.setAdapter(adapter);

List <String> getResources.getStringArray() , .

+6

, .

m_adapterForSpinner = new ArrayAdapter(this, android.R.layout.simple_spinner_item);  
m_adapterForSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        
m_myDynamicSpinner.setAdapter(m_adapterForSpinner);
m_adapterForSpinner.add("dummy item");        

////////////////////////////////////////////////////////////////
addButton.setOnTouchListener(new OnTouchListener(){
    public boolean onTouch(View v, MotionEvent event) {

        final Dialog dialog=new Dialog(roughact.this);
        dialog.setContentView(R.layout.dialog);
        dialog.setTitle("Enter The Item");
        dialog.setCanceledOnTouchOutside(true);

        final EditText filename=(EditText)dialog.findViewById(R.id.filename);
        filename.setText("");

        Button d_ok=(Button)dialog.findViewById(R.id.d_ok);
        Button d_cancel=(Button)dialog.findViewById(R.id.d_cancel);
        d_ok.setOnTouchListener(new OnTouchListener(){
            public boolean onTouch(View v,MotionEvent me){

                CharSequence textHolder = "" + filename.getText();
                m_adapterForSpinner.add(textHolder);

                dialog.dismiss();
                return false;
            }
        });
        d_cancel.setOnTouchListener(new OnTouchListener(){
            public boolean onTouch(View v,MotionEvent me){
                dialog.dismiss();
                return false;
            }
        });
        dialog.show();

        return false;
    }

. u.

+1

, , , List<String>, add . add () createFromResource CharSequence[], .

0
source

Source: https://habr.com/ru/post/1795051/


All Articles