允许用户在Spinner中输入新值

时间:2013-03-28 01:41:18

标签: android android-widget

首先,我是Android开发的新手。我正在构建一个小应用程序,其中包含一个微调器,其中包含四个数字的预定义集合(数组),我使用ArrayAdapter将值从资源文件提供给微调器。

微调器工作正常,用户可以选择值。但我也希望用户能够输入新值,如果他们想输入新值。我该怎么做?

onCreate活动方法中的代码

Spinner spinner = (Spinner) findViewById(R.id.spinner); // Create an ArrayAdapter using the string array and a default spinner layout ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.points_preset, android.R.layout.simple_spinner_item); // Specify the layout to use when the list of choices appears adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Apply the adapter to the spinner spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new SpinnerActivity());

SpinnerActivity类代码:

更新以包含输入对话框:

    public class SpinnerActivity extends Activity implements OnItemSelectedListener {

        public void onItemSelected(AdapterView<?> parent, final View view, 
                int pos, long id) {
            if (pos==3)
            {
                // Set an EditText view to get user input 
                final EditText input = new EditText(MainActivity.this);

                new AlertDialog.Builder(MainActivity.this)
                                            .setMessage("Enter your Point here")
                    .setView(input)
                    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog, int whichButton) {
                          Editable   editable = input.getText(); 
                          //if I uncomment following line, the application terminates
                       // Spinner spinner = (Spinner) findViewById(R.id.spinner);

                         }
                    })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog, int whichButton) {
                                // Do nothing.
                         }
                    }).show(); 
            }

                                    }

        public void onNothingSelected(AdapterView<?> parent) {
            // Another interface callback
        }
    }
                    `

Strings.xml资源文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">PointCalculator</string>
    <string name="menu_settings">Settings</string>
    <string-array name="points_preset">
    <item>3</item>
    <item>10</item>
    <item>0</item>
    <item>Oth</item>
    </string-array>

</resources>

SpinnerActivity Class的更新和工作版本

`

public class SpinnerActivity extends Activity implements OnItemSelectedListener {

                public void onItemSelected(AdapterView<?> parent, final View view, 
                        int pos, long id) {
                    if (pos==3)
                    {
                        // Set an EditText view to get user input 
                        final EditText input = new EditText(MainActivity.this);

                        new AlertDialog.Builder(MainActivity.this)
                                                    .setMessage("Enter your Point here")
                            .setView(input)
                            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                 public void onClick(DialogInterface dialog, int whichButton) {
                                  Editable   editable = input.getText(); 


                           arrayList.add(editable.toString());
                            adapter.notifyDataSetChanged();


                                 }
                            })
                            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                                 public void onClick(DialogInterface dialog, int whichButton) {
                                        // Do nothing.
                                 }
                            }).show(); 
                    }

                                            }

                public void onNothingSelected(AdapterView<?> parent) {
                    // Another interface callback
                }
            }`

谢谢,

2 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点。我们这样做的一种方法是使用spinner项来表示类似“添加项目”的内容。在onItemSelected我们有AlertDialog弹出EditText用于输入项目,然后您只需将其添加到Array或您正在使用的任何内容中。您也可以在EditText旁边或{@ 1}}添加新项目,然后点击Spinner将其添加到您的数据存储位置并调用{{} 1}}更新Button。我希望这能回答你的问题

答案 1 :(得分:0)

创建ArrayAdapter的方式不允许您非常轻松地添加到阵列,因为将从资源创建支持阵列。

首先从资源加载数组并将其添加到List。然后使用该List创建ArrayAdapter。

然后,您可以通过添加到支持列表将项目添加到微调器。您需要在适配器上调用notifyDatasetChanged(),让它知道您更改了适配器中的可用项。