【问题标题】:how to get spinner values in textview如何在 textview 中获取微调器值
【发布时间】:2015-04-04 11:53:45
【问题描述】:

我在警报对话框微调器中收到 json 响应,现在我希望用户在 edittext 中选择的项目以逗号分隔,但是当我运行应用程序时,我只能选择一个,并且在我的 edittext 中它只显示一个项目.. .

public class MainActivity extends Activity {

JSONParser jsonParser = new JSONParser();
JSONArray country_list=null;
private static String BUSINESS_URL = "";

private static final String BUSINESS_ID="id";
private static final String BUSINESS_NAME="name";
ArrayList<HashMap<String,String>> data;
private TextView splang;
private String cname;
private String business_id;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   splang=(TextView)findViewById(R.id.txtvw);

   new LoadBusiness().execute();
}

 class LoadBusiness extends AsyncTask<String, String, ArrayList<HashMap<String,String>>> {

      ArrayAdapter<String> adaptercountry ;
    private ProgressDialog pDialog;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Loading...");
            pDialog.setIndeterminate(false);
           // pDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.custom_progress));
            pDialog.setCancelable(true);
            pDialog.show();

        }
        protected ArrayList<HashMap<String,String>> doInBackground(String... args) {
            ServiceHandler sh = new ServiceHandler();

            // Making a request to url and getting response
            data = new ArrayList<HashMap<String, String>>();
            String jsonStr = sh.makeServiceCall(BUSINESS_URL, ServiceHandler.GET);

            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {

                    country_list = new JSONArray(jsonStr);

                    // looping through All Contacts
                    for (int i = 0; i < country_list.length(); i++) {
                        JSONObject c = country_list.getJSONObject(i);
                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();
                        // adding each child node to HashMap key => value
                        map.put(BUSINESS_ID, c.getString(BUSINESS_ID));
                        map.put(BUSINESS_NAME,c.getString(BUSINESS_NAME));
                        data.add(map);

                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }

            return data;
        }
        protected void onPostExecute(ArrayList<HashMap<String,String>> result) {
            super.onPostExecute(result);
            pDialog.dismiss();

            String[] arrConuntry=new String[data.size()];
            for(int index=0;index<data.size();index++){
                      HashMap<String, String> map=data.get(index);
                  arrConuntry[index]=map.get(BUSINESS_NAME);
             }  
             // pass arrConuntry array to ArrayAdapter<String> constroctor :
            adaptercountry = new ArrayAdapter<String>(MainActivity.this,
                                android.R.layout.simple_list_item_multiple_choice,
                                                                      arrConuntry);
            splang.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View w) {
                      new AlertDialog.Builder(MainActivity.this)
                      .setTitle("Select")
                      .setAdapter(adaptercountry, new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            splang.setText(adaptercountry.getItem(which).toString());

                             try {

                                cname=country_list.getJSONObject(which).getString("id");
                                 Log.d("Response: ", "> " + cname);

                                 business_id=cname.toString();
                                 System.out.println("Business_id"+business_id);

                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }

                          dialog.dismiss();
                        }
                      }).create().show();
                    }
            });

        }
 }

【问题讨论】:

  • 问题无法选择多个项目并将其存储在文本视图中
  • 你读过问题吗?
  • 但在这里我使用了警报对话框...并且我在警报对话框中获得的值使用的是 json..它不是静态值

标签: android json android-alertdialog


【解决方案1】:

定义从多个项目选择对话框中获得回调的自定义接口。

public interface MultipleItemSelectListener {
    public void onSelected(String value,String ids);
}

自定义多项选择对话框方法。

参数

内容:您的活动内容参考。

title:对话框标题。

jsonArrayString :您的 jsonarray 响应为字符串。

MultipleItemSelectListener:自定义项目选择的监听器。

public void getMultiSelectionDialog(final Context context,final String title, String jsonString, final String value, final MultipleItemSelectListener target) {

    final ArrayList<String> values = new ArrayList<String>();
    final ArrayList<String> ids = new ArrayList<String>();
    final String BUSINESS_ID="id";
    final String BUSINESS_NAME="name";

    try {
        JSONArray jsonArray = new JSONArray(jsonString);
        int size = jsonArray.length();
        for (int i = 0; i < size; i++) {
            values.add(((JSONObject) jsonArray.get(i)).getString(BUSINESS_NAME).trim());
            ids.add(((JSONObject) jsonArray.get(i)).getString(BUSINESS_ID).trim());
        }

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

    final boolean[] selections = new boolean[values.size()];
    final StringBuilder newValue = new StringBuilder();
    final StringBuilder newIds = new StringBuilder();

    AlertDialog alert = null;

    if (value.length() > 0) {
        String[] oldValue = value.split(",");
        int size = values.size();
        for (int i = 0; i < size; i++) {
            int len = oldValue.length;
            for (int j = 0; j < len; j++) {
                if (values.get(i).trim().equalsIgnoreCase(oldValue[j].trim())) {
                    selections[i] = true;
                    break;
                }
            }
        }
    }

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle(title);
    builder.setMultiChoiceItems(values.toArray(new CharSequence[values.size()]), selections, new DialogInterface.OnMultiChoiceClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            selections[which] = isChecked;
        }
    });

    builder.setPositiveButton("Done", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            int size = selections.length;
            for (int i = 0; i < size; i++) {
                if (selections[i]) {
                    newValue.append(newValue.length() > 0 ? "," + values.get(i) : values.get(i));
                    newIds.append(newIds.length() > 0 ? "," + ids.get(i) : ids.get(i));
                }
            }
            target.onSelected(newValue.toString(),newIds.toString());

        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            int size = selections.length;
            for (int i = 0; i < size; i++) {
                if (selections[i]) {
                    newIds.append(newIds.length() > 0 ? "," + ids.get(i) : ids.get(i));
                }
            }
            target.onSelected(value,newIds.toString());
        }
    });
    alert = builder.create();
    alert.show();
}

如何获取MultiSelectionDialog:

class LoadBusiness extends AsyncTask<Void,Void,String> {

    Context context;

    public LoadBusiness(Context context){
        this.context=context;
    }

    private ProgressDialog pDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(context);
        pDialog.setMessage("Loading...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected String doInBackground(Void... params) {
        ServiceHandler sh = new ServiceHandler();
        String jsonStr = sh.makeServiceCall(BUSINESS_URL, ServiceHandler.GET);
        Log.d("Response: ", "> " + jsonStr);
        return jsonStr;
    }

    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        pDialog.dismiss();
        setTextViewWithMultipleSelectionDialog(context,result);
    }
}


  public void setTextViewWithMultipleSelectionDialog(final Context context,final String jsonArrayString){

    splang.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getMultiSelectionDialog(context,"Countries",jsonArrayString,splang.getText().toString(),new MultipleItemSelectListener() {
                @Override
                public void onSelected(String value) {
                    splang.setText(value);
                }
            });
        }
    });
 }

 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   splang=(TextView)findViewById(R.id.txtvw);

   new LoadBusiness(this).execute();
}

【讨论】:

  • 您必须将 jsonArray 作为字符串传递,请使用我 ans 中的 LoadBusiness 类代码,我已经更改了它而不是您的 LoadBusiness 类代码。
  • 它说 MainActivity 类型中的方法 getMultiSelectionDialog(Context, String, String, String, MainActivity.MultipleItemSelectListener) 不适用于参数 (MainActivity, String, String, CharSequence, new MainActivity.MultipleItemSelectListener( ){})
  • 现在检查更新并解决上下文引用问题。
  • 类型MainActivity.LoadBusiness必须实现继承的抽象方法AsyncTask.doInBackground(Object...)
  • 现在我有更新了,你可以尝试更改更新的代码吗?
猜你喜欢
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
相关资源
最近更新 更多