【问题标题】:Spinner default no selection when data fetched from json从 json 获取数据时 Spinner 默认不选择
【发布时间】:2018-07-10 20:21:31
【问题描述】:

您好,我之前问过这个问题。但我没有找到合适的解决方案。我有一个微调器,它将从 json 加载数据。从微调器中选择任何项目后,它将再次将第零个位置值发布到另一个 API。一切工作正常。但我的问题是我希望默认情况下没有微调器的选择。我添加了一个名为“没有选择”到第零位,但它不起作用。请帮我实现这个。

我的微调器

   void getList(){

            final Common common = new Common();
            int a= 100;
            String webService = "API/Employee/GetList";
            String postData = "";
            String[] dataColumns = {"ID",//0
                    "Code",//1
                    "Name" ,//2

            };
            Runnable postThread = new Runnable() {
                @Override
                public void run() {
                    //Spinner
                    int a= 0;
                    ArrayList<String> Names = new ArrayList<String>();
                    for (int i=0;i<common.dataArrayList.size();i++){
                        String[] data=new String[3];
                        data[0]=common.dataArrayList.get(i)[0];
                        data[1]=common.dataArrayList.get(i)[1];
                        data[2]=common.dataArrayList.get(i)[2];

                        List.add(data);
                    }
                    for(int i=0;i<List.size();i++){
                        Names.add(List.get(i)[1]+" - "+List.get(i)[2]);
                    }
                    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(Insert.this, R.layout.item_spinner_black, Names);
                    dataAdapter.setDropDownViewResource(R.layout.item_spinner);
                    Spinner =(Spinner)findViewById(R.id.spinner);

//I added below code but it not working 

    //              dataAdapter.insert(getString(R.string.selectemp), 0);
                    Spinner.setAdapter(dataAdapter);


                }

我的帖子数据

  postData="{\"Title\":\""+title.getText().toString()
            +"\",\"Spinnervalue\":\""+List.get(Spinner.getSelectedItemPosition())[0]}

【问题讨论】:

标签: android json gson android-spinner


【解决方案1】:

我认为它对你有帮助。

 ArrayList<String> Names = new ArrayList<String>();
    Names.add("no selection");
   for (int i=0;i<common.dataArrayList.size();i++){
                        String[] data=new String[3];
                        data[0]=common.dataArrayList.get(i)[0];
                        data[1]=common.dataArrayList.get(i)[1];
                        data[2]=common.dataArrayList.get(i)[2];

                        List.add(data);
                    }
                    for(int i=0;i<List.size();i++){
                        Names.add(List.get(i)[1]+" - "+List.get(i)[2]);
                    }

【讨论】:

  • 兄弟它会显示“没有选择”。但问题是它会传递零位置的值
  • 兄弟,如果我不点击微调器,它不应该传递值。在你建议的更改之后,它会在微调器中显示“无选择”。但它会传递数据的值在它下面
  • 好的,我知道了,如果用户没有选择微调器的任何值,那么您希望没有任何数据会通过。我说的对吗?
  • 是的兄弟..就是这样
  • 那么您只需在发送前验证微调器的数据,如果微调器搜索的数据没有选择,则不要传递数据。 String nameData = (String)spinnerName.getSelectedItem();
【解决方案2】:

问题在于适配器的初始化。所以当你稍后添加数据时,它不会有预先选择的项目。

编辑:

我重新排序了您当前的代码。

void getList(){
            final Common common = new Common();
            int a= 100;
            String webService = "API/Employee/GetList";
            String postData = "";
            String[] dataColumns = {"ID",//0
                    "Code",//1
                    "Name" ,//2

            };
            Runnable postThread = new Runnable() {
                @Override
                public void run() {
                    //Spinner
                    int a= 0;
                    ArrayList<String> Names = new ArrayList<String>();
                    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(Insert.this, R.layout.item_spinner_black, Names);
                    dataAdapter.setDropDownViewResource(R.layout.item_spinner);
                    Spinner =(Spinner)findViewById(R.id.spinner);

//I added below code but it not working 

    //              dataAdapter.insert(getString(R.string.selectemp), 0);
                    Spinner.setAdapter(dataAdapter);

                    for (int i=0;i<common.dataArrayList.size();i++){
                        String[] data=new String[3];
                        data[0]=common.dataArrayList.get(i)[0];
                        data[1]=common.dataArrayList.get(i)[1];
                        data[2]=common.dataArrayList.get(i)[2];

                        List.add(data);
                    }
                    for(int i=0;i<List.size();i++){
                        Names.add(List.get(i)[1]+" - "+List.get(i)[2]);
                    }
}

【讨论】:

  • @AndroDevil 确实是因为我不知道这些变量来自哪里。但我要说的是你如何初始化你的适配器的顺序。我会为你编辑我的代码。
  • 兄弟你要什么数据?我会提供。请帮帮我兄弟
  • @AndroDevil 我已经更新了我的答案,你能再试一次吗?谢谢
  • 兄弟我试过你的答案......默认情况下它不会在微调器上显示任何内容。没关系,但每当我继续它时它会在我给出的 postdata 处崩溃..如果我们在微调器上选择任何东西,它的工作
  • 兄弟..是不是因为这条线。 "getSelectedItemPosition())[0]"
【解决方案3】:

我添加了一个虚拟值。它工作正常。

ArrayList<String> Names = new ArrayList<String>();
                ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(Insert.this, R.layout.item_spinner_black, Names);
                dataAdapter.setDropDownViewResource(R.layout.item_spinner);
                Spinner =(Spinner)findViewById(R.id.spinner);

                 String[] data = new String[3];

            data[0]="00000000-0000-0000-0000-000000000000";
            data[1]="Select";
            data[2]="Name";

            List.add(data);





                for (int i=0;i<common.dataArrayList.size();i++){
                    String[] data=new String[3];
                    data[0]=common.dataArrayList.get(i)[0];
                    data[1]=common.dataArrayList.get(i)[1];
                    data[2]=common.dataArrayList.get(i)[2];

                    List.add(data);
                }
                for(int i=0;i<List.size();i++){
                    Names.add(List.get(i)[1]+" - "+List.get(i)[2]);
                }

Spinner.setAdapter(dataAdapter);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    相关资源
    最近更新 更多