簡體   English   中英

如何從另一個活動調用 ArrayAdapter 以使用 strings.xml 數組從 ArrayAdapter 中刪除項目?

[英]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再次擁有相同的值,因為SpinneronCreatere-created並填充來自string-array值。 硬編碼的資源文件是常量,不能在運行時刪除。

解決方案:

您需要將Adapter值存儲在其他地方,例如在SQLiteSharedPreferences (如果它是少量數據)而不是在string-array 這將允許您從保存它們的位置刪除值,一旦從那里刪除值,啟動SpinnerSelectionSpinner將沒有它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM