Can't load data properly from xml file to Spinner

一个人想着一个人 提交于 2019-12-13 07:05:23

问题


I have listgender.xml file like this:

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

This is spinner_data.xml for spinner:

<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" />

This is ClassGender :

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

this is Activity hold spinner :

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;
    }
}

My spinner can get data from XML, but it not male or female.

It shows noname.test.ClassGender@53531c1f and noname.test.ClassGender@53531d74
how to fix it?


回答1:


thats the garbage value you getting.

try this method instead of setting values through adapter programiticaly.

you define string array in string.xml and set it to spinner in your layout file like this

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


来源:https://stackoverflow.com/questions/38180145/cant-load-data-properly-from-xml-file-to-spinner

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!