spinner中的字符串数组

时间:2012-01-13 05:23:04

标签: android

我有一个在微调器适配器中填充的数组。 现在我想改变阵列的大小!可能吗? 救命! 感谢你 `public void classpopulate(){         if(PEP.getUser()== null){             返回;         }

    classdetails = masterDataManager.getClassSections(PEP.getUser()
            .getUsername(), getApplicationContext());
    spnrClass = (Spinner) findViewById(R.id.spnrClass);
    spnrSubject = (Spinner) findViewById(R.id.spnrSubject);
    classname = new String[classdetails.size() + 1];
    classname[0] = "SELECET CLASS";

    for (int i = 1; i < classdetails.size() + 1; i++) {

        classname[i] = classdetails.get(i - 1).getClass_name() + "  "
                + classdetails.get(i - 1).getSection_name().toString();

    }

    ArrayAdapter<CharSequence> adapterClasses = new ArrayAdapter<CharSequence>(
            getApplicationContext(), R.layout.spinner_item_class,
            R.id.spinnerclasstxt, classname);
    spnrClass.setAdapter(adapterClasses);
    spnrClass.setSelection(0);

    spnrClass
            .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

                @Override
                public void onItemSelected(AdapterView<?> arg0, View arg1,
                        int pos, long arg3) {
                    // LinearLayout layoutSpinnersubj = (LinearLayout)
                    // findViewById(R.id.layout_spinner);
                    // RelativeLayout subject_Text
                    // =(RelativeLayout)findViewById(R.id.layoutsubjecttext);
                    int selectedindex = pos;
                    if (selectedindex == 0) {
                        spnrSubject.setVisibility(View.INVISIBLE);
                    } else {
                        spnrSubject.setVisibility(View.VISIBLE);
                        selectedClass = classdetails.get(selectedindex - 1);

                        subjectpopulate(selectedClass);
                    }
                }

                @Override
                public void onNothingSelected(AdapterView<?> arg0) {

                }

            });

`

3 个答案:

答案 0 :(得分:0)

您可以使用ArrayAdapter方法clearaddinsert和/或remove来操作适配器的数据。

编辑:从您的评论中,听起来您最终需要编写自己的自定义适配器(可能通过扩展BaseAdapter),特别是如果您想要禁用(分隔符)行等。将更多地控制显示的内容和外观。在网上搜索“android custom list adapter”,找到很多如何编写一个的示例。这不是太难。

尽管如此,如果你想继续使用ArrayAdapter,这里有一个删除列表第一个元素的例子(假设适配器已保存在成员字段adapter中): / p>

adapter.remove(adapter.getItem(0));

对于更复杂的更改(例如加载完全不同的数据集),您可能会执行以下操作:

String[] newData = . . .
adapter.setNotifyOnChange(false); // temporarily turn off auto-notification
adapter.clear();
adapter.addAll(newData);
adapter.notifyDataSetChanged(); // notifies and turns auto-notifications back on

最好按顺序进行多项更改时暂停自动通知。

答案 1 :(得分:0)

我希望这会对你有所帮助。

在您的活动中,从布局文件中获取引用,例如

Spinner spinner = (Spinner)findViewById(R.id.spinner);

然后,为那个

制作适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,YOUR_STRING_ARRAY);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

然后创建一个 arrays.xml 它包含你的字符串数组。

例如,

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="string_array">
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
        <item>6</item>
        <item>7</item>
        <item>8</item>
        <item>9</item>
        <item>10</item>
</string-array>
</resources>

答案 2 :(得分:0)

您可以使用ArrayList代替数组

ArrayList<String> classname = new ArrayList<String>;
classname.add("SELECET CLASS");

for (int i = 1; i < classdetails.size() + 1; i++) {

        classname[i].add(classdetails.get(i - 1).getClass_name() + "  "
                + classdetails.get(i - 1).getSection_name().toString());

    }

ArrayAdapter<CharSequence> adapterClasses = new ArrayAdapter<CharSequence>(
            getApplicationContext(), R.layout.spinner_item_class,
            R.id.spinnerclasstxt, classname);
    spnrClass.setAdapter(adapterClasses);
    spnrClass.setSelection(0);