无法从微调器中选择项目

时间:2017-12-21 07:41:32

标签: java android xml

我在旋转器中选择一件物品时遇到麻烦,它只是选择了该物品。

这是它加载时的样子 pict 1

然后这是我在选择项目时所显示的内容 pict 2

但是当我选择一个项目时,它没有被选中(如图1所示) 这是我的代码

activity_grade_chooser.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp"
tools:context=".GradeChooserActivity">

<TextView
    android:id="@+id/txtClass"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignTop="@+id/spClass"
    android:layout_gravity="left"
    android:layout_marginLeft="10dp"
    android:text="Class" />

<Spinner
    android:id="@+id/spClass"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/txtClass"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="10dp"
    android:prompt="@string/spinner_class_name"
    android:entries="@array/array_semester"
    android:spinnerMode="dropdown" />

<TextView
    android:id="@+id/txtSemester"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/spClass"
    android:layout_gravity="left"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="10dp"
    android:text="Semester" />

<Spinner
    android:id="@+id/spSemester"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/spClass"
    android:layout_alignStart="@+id/spClass"
    android:layout_below="@+id/spClass"
    android:layout_marginTop="5dp"
    android:prompt="@string/spinner_class_name"
    android:entries="@array/array_semester"
    android:spinnerMode="dropdown" />

<Button
    android:id="@+id/btnGenerate"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    android:layout_below="@+id/spSemester"
    android:text="Generate"
    android:textSize="6pt"
    android:layout_marginLeft="10dp"
    android:textStyle="bold"
    android:textColor="@color/White"
    android:background="@color/GentleBlue"
    android:layout_gravity="center"/>

</RelativeLayout>

这就是活动

GradeChooserActivity.java

import android.app.ProgressDialog;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class GradeChooserActivity extends AppCompatActivity {

static ProgressDialog loading;
private static final String LogTAG = GradeChooserActivity.class.getSimpleName();
static ArrayList<StudentAndClass> ClassList = new ArrayList<>();
ArrayAdapter<String> spinnerAdapter;
Spinner spClass, spSemester;
List<String> labels = new ArrayList<String>();

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

    Log.e(LogTAG, "Loaded");

    spClass = (Spinner) findViewById(R.id.spClass);
    spSemester = (Spinner) findViewById(R.id.spSemester);

    JSON_POST_onLoad(this);
    populateSpinner();
}

private void populateSpinner() {
    spinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, labels);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spClass.setAdapter(spinnerAdapter);
}

void JSON_POST_onLoad(final Context ctx){
    ClassList.clear();
    labels.clear();
    String url = GlobalVariable.URL + "Criteria.php";
    Log.e(LogTAG, "JSON_POST_onLoad Start. URL : " + url);

    loading = ProgressDialog.show(ctx,"Loading Data...","Please wait...",false,false);
    RequestQueue queue = Volley.newRequestQueue(ctx);
    StringRequest postRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>()
            {
                @Override
                public void onResponse(String response) {
                    // response
                    Log.e(LogTAG, "JSON POST onResponse : " + response);

                    try {
                        Log.e(LogTAG, "Start Try JSON - " + response.toString());
                        JSONObject jsObj = new JSONObject(response);
                        String result = jsObj.getString("result");

                        if (!result.equals("Valid")) {
                            Log.e(LogTAG, "Failed");
                        } else {
                            JSONArray jsArr = jsObj.getJSONArray("query_result");
                            Log.e(LogTAG, "Valid 0");

                            for (int i = 0; i < jsArr.length(); i++) {
                                JSONObject jsObj2 = jsArr.getJSONObject(i);

                                Log.e(LogTAG, "Valid 1");

                                labels.add(jsObj2.optString("class_name"));

                                Log.e(LogTAG, "lstUserIndex JSON value : " + jsObj2.optString("class_name"));

                            }

                            Log.e(LogTAG, "JSON Ended");
                        }
                        loading.dismiss();
                    } catch (JSONException e) {
                        e.printStackTrace();
                        loading.dismiss();
                    }
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // error
                    Log.e(LogTAG, "JSON POST onResponse : " + error.toString());
                    loading.dismiss();
                }
            }
    ) {
        @Override
        protected Map<String, String> getParams()
        {
            Map<String, String> params = new HashMap<String, String>();
            params.put("command","Class By Student ID");
            params.put("student_id",GlobalVariable.StudentID);

            return params;
        }
    };
    postRequest.setRetryPolicy(new DefaultRetryPolicy(
            (int) TimeUnit.SECONDS.toMillis(20),
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    queue.add(postRequest);
}
}

第一个微调器下方的第二个微调器(学期)工作得很好,因为我事先设置了条目。 谁能帮我这个? 或者,除了微调器之外,是否有人有任何使用除了下拉之外的提示?

1 个答案:

答案 0 :(得分:0)

尝试将labels.add行之后的populateSpinner()方法设置为

/:

为什么你的代码不起作用是因为(Nil /:[List[Int]] li)((a, b) => b :: a) 是异步的,并且在你的数据从服务器到达之前你正在填充微调器。

或替代

保持您的代码不变,只需在您的labels.add

之后添加此行
 labels.add(jsObj2.optString("class_name"));
 populateSpinner();