【问题标题】:Android to set selected spinner item onto Edit Text ViewAndroid将选定的微调器项目设置到编辑文本视图
【发布时间】:2016-01-22 19:36:38
【问题描述】:

我是安卓新手。我在我的微调器中显示 5 个字符串,我希望当用户选择一个字符串时,它会显示到编辑文本视图中。我完成了微调器项目的设置,但我不知道如何在编辑文本视图上显示它。我还想将其保存到共享首选项(我允许用户从微调器中选择文本或手动输入任何文本。我可以将自定义文本设置为共享首选项,但不知道如何保存所选文本文字)

  Spinner spinner;
        String[] alert = { "I am in danger", "Help Me", "Watch Out", "Look For Me",
                "Cover ME" };
        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         SharedPreferences sp = getSharedPreferences("EditValue" ,0);
            String myvalue = sp.getString("myvalue","");
            if(myvalue!=null || !myvalue.equalsIgnoreCase("")) {
               message.setText(myvalue);
            } 


        spinner = (Spinner) findViewById(R.id.Spin_alert_message);
        ArrayAdapter<String> adp = new ArrayAdapter<String>(
                getApplicationContext(), android.R.layout.simple_spinner_item,
                alert);
        spinner.setAdapter(adp);

        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int position, long id) {
            String   selectedItem = alert[position];
                    message.setText(selectedItem);


                    SharedPreferences sp = getSharedPreferences("EditValue" ,0); 
                    SharedPreferences.Editor spEdt = sp.edit();
                    spEdt.putString("myvalue", message.getText().toString());
                    spEdt.commit();




            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
            }
        });

        // for saving text that user can change as per need
        final SharedPreferences preferences = PreferenceManager
                .getDefaultSharedPreferences(this);

        message = (EditText) findViewById(R.id.et_message);
        // loads the text that has been stored to SP and set it to Edit Text
        message.setText(preferences.getString("autoSave", ""));
        // adding addTextChangedListner() to the Edit Text View
        message.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                // saving text after it is changed by the user
                preferences.edit().putString("autoSave", s.toString()).commit();

            }
        });

【问题讨论】:

  • spinner获取选定的值并设置文本int EditText
  • 使用setOnItemSelectedListener 作为微调器来获取他的项目名称并在Edittext 中设置山雀

标签: android android-spinner


【解决方案1】:

你可以像下面这样使用微调器 setOnItemClickListener

spinner.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                String selected = arg0.getItemAtPosition(arg2).toString();
                    edittext.setText(selected);
            }
        });

【讨论】:

  • 是 setOnItemClickListner 还是 setOnItemSelectListner
  • @bhanukaushik 它的 OnItemSelectedListener()。
  • @bhanukaushik 你可以同时使用。我在我的项目中使用了 setOnItemClickListener。
【解决方案2】:

你可以这样:

   spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
   @Override
   public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
    selectedItem = alert[position];
    edittext.setText(selectedItem);


    SharedPreference sp = getSharedPreference("EditValue" ,0); 
    SharedPreference.Editor spEdt = sp.edit();
    spEdt.putString("myvalue", edittext.getText().toString());
    spEdt.commit();


   }

   @Override
   public void onNothingSelected(AdapterView<?> arg0) {
   }
   });

现在,只要您想从 SharedPreference 中获得价值,您就可以通过..

    SharedPreference sp = getSharedPreference("EditValue" ,0);
    String myvalue = sp.getString("myvalue","");
    Log.v("GetValue",myvalue);

更新:

检查 oncreate() 方法..

   SharedPreference sp = getSharedPreference("EditValue" ,0);
   String myvalue = sp.getString("myvalue","");
   if(myvalue!=null || !myvalue.equalsIgnoreCase("")) {
      edittext.setText(myvalue);
   } 

新更新:

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

    message = (EditText) findViewById(R.id.et_message);
    spinner = (Spinner) findViewById(R.id.Spin_alert_message);

     SharedPreferences sp = getSharedPreferences("EditValue" ,0);
     String myvalue = sp.getString("myvalue","");
        if(myvalue!=null || !myvalue.equalsIgnoreCase("")) {
           message.setText(myvalue);
        } 



    ArrayAdapter<String> adp = new ArrayAdapter<String>(
            getApplicationContext(), android.R.layout.simple_spinner_item,
            alert);
    spinner.setAdapter(adp);

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int position, long id) {
        String   selectedItem = alert[position];
                message.setText(selectedItem);


                SharedPreferences sp = getSharedPreferences("EditValue" ,0); 
                SharedPreferences.Editor spEdt = sp.edit();
                spEdt.putString("myvalue", message.getText().toString());
                spEdt.commit();




        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });


    // loads the text that has been stored to SP and set it to Edit Text

    message.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            // saving text after it is changed by the user


        }
    });

【讨论】:

  • 我已经更新了我的代码,我想如果用户想输入他自己的消息,他可以在编辑文本视图中执行此操作,我保存在共享首选项中并且工作正常但不是现在如果他想从中进行选择,我也会给出我自己的 5 条消息,它将显示以编辑文本并保存在共享首选项中。但是现在,他们都没有工作:(
  • 但是 5 条消息将存储在您的数组中。你刚刚根据它的数组位置保存
  • 假设我从微调器中选择“注意”,如果我关闭应用程序或重新启动手机,我希望“注意”文本出现在编辑文本中。
  • 所以在单击微调器后,您已将 vale 设置为 edittext..所以不工作?
  • 对不起??没听懂
【解决方案3】:

onItemSelected方法中,按照@Mayuri提到的方式获取选中项的位置,或者

String selected = alert[position];
editText.setText(selected);

【讨论】:

  • 我已经更新了我已经实现的代码及其工作,但是在 Edittext 上显示的选定字符串没有保存到共享首选项中。
  • 要将其保存到同一个 onItemSelected 侦听器中的 sharedpreference 中,这样写: Editor edit = sp.edit(); edit.putString("key",selectedString);edit.commit();
【解决方案4】:

为微调器设置并实现OnItemSelectedListener(),并在onItemSelected 方法内部获取所选项目并设置EditText.setText()

【讨论】:

    【解决方案5】:

    以这种方式实现:OnItemSelectedListener()

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
        selectedItem = alert[position];
        edittext.setText(selectedItem);
    }
    
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
    }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      相关资源
      最近更新 更多