【问题标题】:Android Studio: Why is the spinner not displayed correctly?Android Studio:为什么微调器显示不正确?
【发布时间】:2020-09-12 23:09:31
【问题描述】:

这是关于微调器的。他从一个 ArrayList 中获取他的数据,后者从一个 http 请求中获取您的数据。 http请求是json格式的,会做相应的转换。

package de.it18b.saufomat;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

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

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    public TextView mTextViewResult;

    ArrayList<String> tester;

    public MainActivity() throws IOException {
    }

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

        tester=new ArrayList<>();

        try {
            run("http://111.111.111.1/helloWorld");

        } catch (IOException e) {
            e.printStackTrace();
        }

    }




    public void btnc1(View view) throws IOException {
        run("http://111.111.111.1/helloWorld");
    }
    public void btnc2(View view) throws IOException {
        run("http://111.111.111.1/helloWorld");
    }

    public void run(String url) throws IOException {
        mTextViewResult = findViewById(R.id.text_view_result);
        Spinner spinner = findViewById(R.id.spinner1);
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    final String myResponse = response.body().string();
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                JSONObject jsonObject=new JSONObject(myResponse);
                                String test0 = jsonObject.toString();
                                tester.clear();
                                tester.add(0,"Auswählen");

                                JSONArray jsonArray=jsonObject.getJSONArray("data");
                                for(int i=0; i < jsonArray.length(); i++) {
                                    tester.add(jsonArray.getString(i));
                                }

                                mTextViewResult.setText(test0);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                    });
                }
            }
        });


        ArrayAdapter adapter = new ArrayAdapter(this,   android.R.layout.simple_spinner_item, tester);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String text = parent.getItemAtPosition(position).toString();
                Toast.makeText(parent.getContext(), text, Toast.LENGTH_SHORT).show();
            }

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

            }
        });
    }

}

问题是微调器不直接显示内容,虽然它在应用启动时被填充。如果我点击小箭头,条目在里面但无法选择。如果我再次点击button2(Bestellen)并执行请求(包括在微调器中插入),第一个条目显示正确,您可以选择其他数据。

有人有解决办法吗? 非常感谢

Screenshot

附上一段视频,帮助你理解问题

https://puu.sh/GrWt0/b9cfca5f97.mp4

【问题讨论】:

    标签: java android android-studio spinner android-spinner


    【解决方案1】:

    不要创建一个空的 ArrayList,而是将一个项目添加到 arrayList,这样无论何时 spinner 运行它都有默认选择。然后,当从远程获取数据并在微调器下拉列表中可用时,如果您选择微调器项目,它将选择该项目而不会延迟。

    示例:

          List tester = new ArrayList<>();
    
          tester.add("Nothing selected");// or use empty String 
    

    【讨论】:

    • 您好,感谢您的回答。我已经用这样的“占位符”条目填充了 ArrayList? tester.add(0,"Auswählen");
    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多