【问题标题】:Android / MySQL: Populate Spinner from database with Initial Set Text "Please Select"Android / MySQL:使用初始设置文本“请选择”从数据库填充微调器
【发布时间】:2020-02-19 08:42:58
【问题描述】:

我想询问有关我的代码的问题。我成功创建了一个列出数据库中数据的微调器。

在我的例子中,这个微调器将从“工厂”表的“fac_name”列填充数据。现在,在微调器的初始列表中,我想显示一个文本“请选择”,文本下方将显示来自数据库的填充数据。下面是我的代码。

Java

public static final String TAG_FAC_NAME = "fac_name";

public static final String JSON_ARRAY = "result";
private JSONArray result;
private ArrayList<String> factoryList;

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

    factoryList = new ArrayList<>();
    spFactory = findViewById(R.id.spFactory);
    spFactory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        }

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

        }
    });

    getData();

}

private void getData(){
    StringRequest stringRequest = new StringRequest(URLs.URL_SPINNER_FACTORY,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    JSONObject j = null;

                    try {
                        j = new JSONObject(response);

                        result = j.getJSONArray(JSON_ARRAY);

                        getFactory(result);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}

private void getFactory(JSONArray j){
    for(int i=0;i<j.length();i++){
        try {
            JSONObject json = j.getJSONObject(i);

            factoryList.add(json.getString(TAG_FAC_NAME));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    spFactory.setAdapter(new ArrayAdapter<String>(AddTask.this, android.R.layout.simple_spinner_dropdown_item, factoryList));
}

URL_SPINNER_FACTORY (spinner_factory.php)

<?php 

    require_once "../config/configPDO.php";

    $query = $conn->prepare("SELECT * FROM ot_factory ORDER BY fac_id ASC");
    $query->execute();

    $factoryList = array();

    while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
        array_push($factoryList,array(

            'fac_name'=>$row['fac_name'],

            )
        );
    }

    echo json_encode(array('result'=>$factoryList));

?>

有人能帮我解决这个问题吗?谢谢。。

【问题讨论】:

    标签: java php android mysql android-spinner


    【解决方案1】:

    您可以使用 XML 代码来完成。喜欢

    `<Spinner
      android:id="@+id/R.id.spFactory"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginStart="20dp"
      android:layout_marginLeft="20dp"
      android:layout_marginTop="15dp"
      android:layout_marginBottom="15dp"
      android:prompt="Please Select" />`
    

    【讨论】:

    • 我得到了这个错误'AAPT:错误:'请选择'与属性提示(attr)参考不兼容'
    • 我的意思是你可以添加请在字符串资源中选择单词并像这样添加它。android:prompt="@string/Please_Select"
    • 还是不能兄弟
    【解决方案2】:

    别担心,

    1)您可以通过 .setPrompt("Select an item"); 以编程方式设置提示。就在设置微调器适配器之前 2)或者您可以使用自定义微调器视图不要使用微调器。相反,使用带有标题的按钮和样式看起来像一个微调器(必须找到我是如何做到的)。当用户单击按钮时,打开一个“选择一个”对话框并将其样式设置为看起来像微调器的对话框。我会尽快放一个代码示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多