0

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?

Sufian
  • 6,405
  • 16
  • 66
  • 120
1234abcd
  • 467
  • 2
  • 5
  • 15
  • It seems that you're adding complexity where simpler thing will work. Do you want your spinner to show only two options - "male" and "female"? – Sufian Jul 05 '16 at 12:03

1 Answers1

0

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"
    />
Community
  • 1
  • 1
Jolson Da Costa
  • 1,095
  • 1
  • 12
  • 31