点击后Spinner不显示数据

时间:2018-03-14 07:48:58

标签: android api spinner

所以我一直在尝试使用getAll,getByID等API调用显示本地mysql服务器的数据列表。在下拉式的旋转器上。但是当我点击旋转器时没有任何反应。这是我将数据传递给微调器的代码: -

public class markAbsentee extends AppCompatActivity implements OnItemSelectedListener{
    Button fromDate, toDate, save;
    TextView displayFDate, displayTDate;
    Spinner genieS;
    List genieList;

    private Spinner getGenieS;
    private List<Genie> getGenieList;
    private Button getFromDate;
    private Button getToDate;
    private Button getSave;
    private TextView getDisplayFDate;
    private TextView getDisplayTDate;

    private DatePickerDialog.OnDateSetListener mDateSetListener, mDateSetListener1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mark_absentee);
        getGenieS = (Spinner) findViewById(R.id.geniespinner);
        getFromDate = (Button) findViewById(R.id.button2);
        getToDate = (Button) findViewById(R.id.button3);

        getDisplayFDate = (TextView) findViewById(R.id.fromDate);
        getDisplayTDate = (TextView) findViewById(R.id.toDate);


        new SpinTask().execute();
        //I have called the AsyncTask here which contains the get() API


    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Genie selected = (Genie)parent.getSelectedItem();
        Toast.makeText(markAbsentee.this, selected.id + " " + selected.name, Toast.LENGTH_LONG).show();
    }

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

    }


    class SpinTask extends AsyncTask<Void, Void, List<Genie>>{

        private Exception exception;

        protected void onPreExecute(){}
        @Override
        protected List<Genie> doInBackground(Void... voids) {
            GenieService genieService = new GenieService();
            return genieService.getAll();
        }
        protected void onPostexecute(List<Genie> genies){
            if(genies == null){
                new ArrayList<Genie>();
            }else {
                List<String> rows = genies.stream().map(genie -> getRow(genie)).collect(Collectors.toList());

                ArrayAdapter<Genie> adapter = new ArrayAdapter<Genie>(markAbsentee.this, android.R.layout.simple_spinner_item, genies);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                Toast.makeText(markAbsentee.this, "Clicked", Toast.LENGTH_LONG).show();
                genieS.setAdapter(adapter);
            }
        }

        private String getRow(Genie g){
            return String.format("%s %s", g.name, g.salary);
        }
    }

}

这里是微调器的布局: -

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bcak"
    android:orientation="vertical"
    tools:context="com.codionics.geniem.markAbsentee">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="76dp"
            android:layout_marginTop="59dp"
            android:text="Enter Absentee"
            android:textSize="30dp"
            android:textColor="#ffff" />


        <Spinner
            android:id="@+id/geniespinner"
            android:layout_width="350dp"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/textView4"
            android:layout_marginStart="20dp"
            android:layout_marginTop="27dp"
            android:popupBackground="@color/colorPrimary"
            android:spinnerMode="dropdown"
            android:autofillHints="Select genie" />


    </RelativeLayout>
</android.support.constraint.ConstraintLayout>

P.S: - GenieService是用于调用API的服务类。我想在微调器下拉列表中显示该人员的姓名和工资。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当你设置微调器值时,它只包含单个值,如字符串,整数等显示。当您获取数据时,它会将数据添加到列表中,如下所示......

listArray.addAll("Your Value");

然后在下面定义数组适配器并设置spinner ..

ArrayAdapter arrayAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,strings);
spinner.setAdapter(arrayAdapter);

然后你调用任何关于微调器项目选择的函数,如下面的代码......

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
     @Override
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
         Toast.makeText(getApplicationContext(),"Hello",0).show();
     }

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

     }
});