向适配器添加新项时,ArrayAdapter崩溃

时间:2018-02-15 16:38:24

标签: java android firebase spinner android-arrayadapter

我遇到的问题是,当我尝试动态添加项目到我的微调器时,应用程序崩溃了。所以首先我从Strings.xml添加一个数组R.array.restrictions包含16项,因此我将每个键插入16,然后将其添加到下一个位置。然后我从firebase加载每个项目并将其添加到适配器,然后我设置适配器,所以在我看来它应该工作。任何想法导致崩溃的想法?说:

  

UnsupportedOperationException at   java.util.AbstractList.add(AbstractList.java:148)

感谢。

    public void startSpinner(){

    //built in Profiles
    spinner = (Spinner) findViewById(R.id.spinnerProfiles);
    adapter = ArrayAdapter.createFromResource(this, R.array.restrictions, android.R.layout.simple_spinner_item);

    myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.
            map = (Map<String, Object>) dataSnapshot.child("users").child(userID).getValue();
            ArrayList<String> array  = new ArrayList<>();
            int x = 16;
            for (Map.Entry<String,Object> entry : map.entrySet()) {
                // key contains Profile Name
                String key = entry.getKey();
                adapter.insert(key, x);
                x++;
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            //Auto Generated Method
        }
    });
    adapter.setDropDownViewResource(android.R.layout.simple_list_item_1);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(this);
}

1 个答案:

答案 0 :(得分:2)

也许问题是您正在更改来自资源的阵列。这可能发生在您使用的列表不是由您创建的情况下。 您可以尝试以下方法:

ArrayList<CharSequence> array = new ArrayList<CharSequence>(Arrays.asList(context.getResources().getTextArray(R.array.restrictions)));
adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, array);