首先,我是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
}
}`
谢谢,
答案 0 :(得分:4)
有几种方法可以做到这一点。我们这样做的一种方法是使用spinner
项来表示类似“添加项目”的内容。在onItemSelected
我们有AlertDialog
弹出EditText
用于输入项目,然后您只需将其添加到Array
或您正在使用的任何内容中。您也可以在EditText
旁边或{@ 1}}添加新项目,然后点击Spinner
将其添加到您的数据存储位置并调用{{} 1}}更新Button
。我希望这能回答你的问题
答案 1 :(得分:0)
创建ArrayAdapter的方式不允许您非常轻松地添加到阵列,因为将从资源创建支持阵列。
首先从资源加载数组并将其添加到List。然后使用该List创建ArrayAdapter。
然后,您可以通过添加到支持列表将项目添加到微调器。您需要在适配器上调用notifyDatasetChanged(),让它知道您更改了适配器中的可用项。