【问题标题】:Can't load data properly from xml file to Spinner无法将数据从 xml 文件正确加载到 Spinner
【发布时间】:2016-07-05 19:59:52
【问题描述】:

我有这样的listgender.xml 文件:

<gender>
    <sex>male</sex>
    <sex>female</sex>
</gender>

这是spinner_data.xml 用于微调器:

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tv_spinner"
    android:textColor="#ff0004"
    android:textSize="14sp"
    xmlns:android="http://schemas.android.com/apk/res/android" />

这是ClassGender

public class ClassGender {
    private String sex;
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}

这是 Activity 保持微调器:

Spinner sp;
Button bt;
TextView tv;

static final String KEY_SEX = "sex";

List<ClassGender> spList = null;

String sex;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_4);

    sp = (Spinner) findViewById(R.id.spinner_t4);
    try {
        XmlPullParserSpinner parser_Emp = new XmlPullParserSpinner();
        spList = parser_Emp.parse(getAssets().open("listgender.xml"));

        ArrayAdapter<ClassGender> adapter = new ArrayAdapter<ClassGender>(this,
                R.layout.spinner_data, spList);
        sp.setAdapter(adapter);

        tv = (TextView)findViewById(R.id.tv_T4);
        bt = (Button)findViewById(R.id.bt_T4);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = sp.getSelectedItem().toString();
                tv.setText(text);
            }
        });

    }
    catch (Exception e){
        e.printStackTrace();
    }

}

public class XmlPullParserSpinner {

    private ClassGender c_g;
    private String text;

    public XmlPullParserSpinner() {
        spList = new ArrayList<ClassGender>();
    }

    public List<ClassGender> parse(InputStream is) {
        XmlPullParserFactory factory = null;
        XmlPullParser parser = null;
        try {
            factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            parser = factory.newPullParser();
            parser.setInput(is, null);
            int eventType = parser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                String tagname = parser.getName();
                switch (eventType) {
                    case XmlPullParser.START_TAG:
                        if (tagname.equalsIgnoreCase(KEY_SEX)) {
                            c_g = new ClassGender();
                        }
                        break;
                    case XmlPullParser.TEXT:
                        text = parser.getText();
                        break;
                    case XmlPullParser.END_TAG:
                        if (tagname.equalsIgnoreCase(KEY_SEX)) {
                            spList.add(c_g);
                            c_g.setSex(text);
                        }
                        break;
                    default:
                        break;
                }
                eventType = parser.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return spList;
    }
}

我的微调器可以从 XML 中获取数据,但不是男性也不是女性。

它显示noname.test.ClassGender@53531c1fnoname.test.ClassGender@53531d74
如何解决?

【问题讨论】:

  • 您似乎在增加复杂性,而更简单的事情会起作用。您是否希望您的微调器仅显示两个选项 - “男性”和“女性”?

标签: android android-spinner android-xml


【解决方案1】:

这就是你得到的垃圾值。

尝试this 方法,而不是通过适配器程序设置值。

您在 string.xml 中定义字符串数组并将其设置为您的布局文件中的微调器,如下所示

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

【讨论】:

  • 我想从asset文件夹中的xml文件加载数据到spinner
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 2019-08-25
  • 2019-09-12
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
相关资源
最近更新 更多