android - android 应用程序中的 adapter.clear

标签 android crash android-arrayadapter

我正在尝试让几个微调器根据他们之前选择的微调器进行动态更改。我可以更新列表,但是当我使用 adapter.clear() 时它崩溃了。这是我的代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class CarKitsAct extends Activity{

    ArrayAdapter<String> adMod, adEd;
    String[] models, edition;
    Boolean initSpMan = true;
    Boolean initSpMod = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.carkitslayout);

    // Construct TextViews
        TextView textMan = (TextView) findViewById(R.id.textMan);
        textMan.setText(R.string.selectmanufacturer);
        TextView textMod = (TextView) findViewById(R.id.textMod);
        textMod.setText(R.string.selectmodel);
        TextView textEd = (TextView) findViewById(R.id.textEd);
        textEd.setText(R.string.selectedition);

    // Construct Spinners
        Spinner spMan = (Spinner) findViewById(R.id.spMan);
        Spinner spMod = (Spinner) findViewById(R.id.spMod);
        Spinner  spEd = (Spinner) findViewById(R.id.spEd);

    // Construct Manufacturer Spinner Adapter
        ArrayAdapter<CharSequence> adMan;
        adMan = ArrayAdapter.createFromResource(this, R.array.cars, android.R.layout.simple_spinner_item);
        adMan.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spMan.setAdapter(adMan);

    // Set initial values for model and edition spinners
        models = getResources().getStringArray(R.array.AC);
        edition = getResources().getStringArray(R.array.ACAcceca);

    //Construct adapters for models and editions
        adMod = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, models);
        adMod.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        adMod.setNotifyOnChange(true);
        spMod.setAdapter(adMod);

        adEd = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, edition);
        adEd.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        adEd.setNotifyOnChange(true);
        spEd.setAdapter(adEd);

    // Set up listeners for item selection
        spMan.setOnItemSelectedListener(new ManItemSelectedListener());
    }

    public class ManItemSelectedListener implements OnItemSelectedListener {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            if (initSpMan ==  true) {
                initSpMan = false;
            } else {
                models = getResources().getStringArray(2130968577 + pos);
                adMod.clear();
                adMod.addAll(models);
                adMod.notifyDataSetChanged();               
            }
    }
        public void onNothingSelected(AdapterView<?> parent) {}
    }
}

如您所见,我尝试使用 bool 标志来确定微调器是否刚刚创建,但是当我更改选择时它会消失。

最佳答案

你可能得到一个 UnsupportedOperationException , 正确的?这是因为适配器使用对象数组进行初始化,它在内部转换为 AbstractList。 , 无法修改。

要解决您的问题,您只需提供实现 List<?> 的内容即可接口(interface)到适配器。示例:

String[] strings = getResources().getStringArray(R.array.cars);
List<String> items = new ArrayList<String>(Arrays.asList(strings));
ArrayAdapter<String> adMan = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items);

关于android - android 应用程序中的 adapter.clear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10504353/

相关文章:

java - 将 "\"替换为字符串

ios - Google+ 登录崩溃

spring - 如何在Spring Boot中更改crashHub端口

java - 为什么 setOnClick 会使这个应用程序崩溃?

java - Android MediaPlayer 音量很低(已调整音量)

android - 如何高效地在谷歌地图中绘制多条折线?

android - ArrayAdapter 的 getView() 方法没有被调用

java - 使用ArrayAdapter填充ListView时无法找到TextView

android - 在 ArrayAdapter 中覆盖 getDropDownView 时出现样式问题

android - 观察EditText时,OnBackPressed不起作用