[英]How can I call an ArrayAdapter from another activity to delete item from ArrayAdapter with strings.xml array?
问题总结: adapter 和 spinner 都在 Spinner Activity 中。 一旦用户选择了一个名字,它就会将它们发送到主活动。 我想从另一个活动调用一个 ArrayAdapter 并从该列表中删除一个项目,但似乎无法弄清楚如何这样做。 我使用 ArrayAdapter 并从strings.xml
并使用string-array name="horizon_names"
将列表附加到它
从另一个 Activity 调用自定义 ArrayAdapter 方法不能解决我的问题。
我尝试过的:我尝试将ArrayAdapter
设为公开并尝试在其他活动中调用它,但没有任何结果。
微调选择活动:
public class SpinnerSelection extends AppCompatActivity implements
AdapterView.OnItemSelectedListener {
Spinner spinner;
TextView tvPackage;
String stringSelectionPackage;
Button bSaveSelection;
Context context;
public ArrayAdapter<CharSequence> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner_selection);
context = this;
//---------------------------------------------------
// Name Selection (1-24)
spinner = findViewById(R.id.spinner);
tvPackage= findViewById(R.id.tvPackage);
//Array Adapter for creating list
adapter = ArrayAdapter.createFromResource(this, R.array.names,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
//Save Selection Button Code
bSaveSelection = findViewById(R.id.bSaveSelection);
bSaveSelection.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(),
MainActivity.class);
stringSelectionPackage=
tvPackage.getText().toString();
myIntent.putExtra("name", stringSelectionPackage);
startActivity(myIntent);
finish();
}
});
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i,
long l) {
//Put user selection into String text
String text = adapterView.getItemAtPosition(i).toString();
//Store text in tvPackage to send it to MainActivity and
place in @id/textViewName TextView
tvPackage.setText(text);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
}
主要活动:
Within onCreate
//GETTING NAME FROM SPINNER SELECTION
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("name");
textViewName.setText(value);
**THIS IS WHERE I WANT TO DELETE ITEM FROM LIST**
adapter.remove(value);
}
字符串.xml
<string-array name="names">
<item>Name 01</item>
<item>Name 02</item>
<item>Name 03</item>
<item>Name 04</item>
<item>Name 05</item>
</string-array>
预期和实际结果我希望能够从其他活动调用 ArrayAdapter,并删除用户在主活动中选择的项目,但我无法在 MainActivity 中调用 ArrayAdapter。
您想要完成的任务需要不同的方法。
问题总结:
您的
adapter
位于SpinnerSelection
,在用户从Spinner
选择值finished
立即finished
,这意味着每次启动SpinnerSelection
时,您将在Spinner
再次拥有相同的值,因为Spinner
在onCreate
内re-created
并填充来自string-array
值。 硬编码的资源文件是常量,不能在运行时删除。
解决方案:
您需要将Adapter
值存储在其他地方,例如在SQLite
或SharedPreferences
(如果它是少量数据)而不是在string-array
。 这将允许您从保存它们的位置删除值,一旦从那里删除值,启动SpinnerSelection
时Spinner
将没有它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.