[英]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.