为创建的视图设置onClick,getText等

时间:2013-06-07 23:38:39

标签: android json logic

这是一个基于逻辑的问题,我需要一小段代码或一个想法来提供答案。

我正在创建一个U.I.以编程方式从JSON响应。这个应用程序将加载未知数量的问题和答案。我正在使用循环和条件语句为U.I创建Views。我正在使用AsyncTask进行大部分繁重的工作。

我似乎无法弄清楚的问题是:我将如何提供未知数量的视图唯一 ID,以便我可以使用它们。

我提供了所有fragment代码,因此您知道到底发生了什么:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.fragment_assessment, container, false);
        ab = getActivity().getActionBar();
        infoList = new ArrayList<HashMap<String, String>>();
        new Load().execute();

        return view;
    }

    class Load extends AsyncTask<String, Void, String> {
        private ProgressDialog pDialog;
        JSONParser jParser = new JSONParser();
        JSONArray questions = null;

        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(getActivity());
            pDialog.setMessage("Loading questions. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        protected String doInBackground(String... args) {

            // getting JSON string from URL
            String componentName = (String) ab.getSelectedTab().getText();
            companyName = model.getcName();
            projectName = model.getpName();
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
            nameValuePairs.add(new BasicNameValuePair("company", companyName));
            nameValuePairs.add(new BasicNameValuePair("project", projectName));
            nameValuePairs.add(new BasicNameValuePair("component",
                    componentName));

            JSONObject json = jParser.makeHttpRequest(url, "POST",
                    nameValuePairs);
            // Check your log cat for JSON response
            Log.d("All Questions: ", json.toString());
            try {
                // Checking for SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    Log.v("RESPONSE", "Success!");
                    // products found: getting Array of Questions
                    questions = json.getJSONArray(TAG_QUESTIONS);

                    // looping through All Questions
                    for (int i = 0; i < questions.length(); i++) {

                        JSONObject c = questions.getJSONObject(i);

                        // Storing each JSON item in variable
                        String name = c.getString(TAG_NAME);
                        String field = c.getString(TAG_FIELD);
                        String value = c.getString(TAG_VALUE);

                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        map.put(TAG_NAME, name);
                        map.put(TAG_FIELD, field);
                        map.put(TAG_VALUE, value);

                        infoList.add(map);
                    }

                } else {
                    // no products found
                    Log.v("ERROR", "No JSON for you!");
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

        protected void onPostExecute(String string) {
            // dismiss the dialog
            pDialog.dismiss();

            for (int i = 0; i < infoList.size(); i++) {
                // get HashMap
                HashMap<String, String> map = infoList.get(i);
                // if the answer should be a radio button, inflate it
                if (map.get(TAG_FIELD).equals(r)) {
                    Log.v("RESPONSE", "About to create a radio button");
                    // find
                    LinearLayout content = (LinearLayout) view
                            .findViewById(R.id.add);
                    // create
                    ArrayList<String> value = new ArrayList<String>();
                    TextView tv = new TextView(getActivity());
                    RadioGroup rg = new RadioGroup(getActivity());
                    rg.setOrientation(RadioGroup.HORIZONTAL);
                    RadioButton rb = new RadioButton(getActivity());
                    RadioButton rb2 = new RadioButton(getActivity());
                    LinearLayout ll = new LinearLayout(getActivity());
                    // set
                    rb.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    rb2.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    ll.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    String s = map.get(TAG_VALUE);
                    for (String parts : s.split("\r\n")) {
                        value.add(parts);
                    }
                    rb.setText(value.get(0));
                    rb2.setText(value.get(1));
                    tv.setText(map.get(TAG_NAME));
                    ll.setOrientation(LinearLayout.HORIZONTAL);                 
                    // add
                    rg.addView(rb);
                    rg.addView(rb2);
                    ll.addView(tv);
                    ll.addView(rg);
                    content.addView(ll);
                }
                // create an EditText field
                else if (map.get(TAG_FIELD).equals(et)) {
                    Log.v("RESPONSE", "About to create an EditText");
                    // find
                    LinearLayout content = (LinearLayout) getActivity()
                            .findViewById(R.id.add);
                    // create
                    TextView tv = new TextView(getActivity());
                    EditText et = new EditText(getActivity());
                    LinearLayout ll1 = new LinearLayout(getActivity());
                    // set
                    tv.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    et.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    ll1.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    tv.setText(map.get(TAG_NAME));
                    ll1.setOrientation(LinearLayout.HORIZONTAL);                    
                    // add
                    ll1.addView(tv);
                    ll1.addView(et);
                    content.addView(ll1);
                }
                // create CheckBox
                else if (map.get(TAG_FIELD).equals(cb)) {
                    Log.v("RESPONSE", "About to create a CheckBox");
                    // find
                    LinearLayout content = (LinearLayout) getActivity()
                            .findViewById(R.id.add);
                    // create
                    TextView tv = new TextView(getActivity());
                    CheckBox cb = new CheckBox(getActivity());
                    LinearLayout ll2 = new LinearLayout(getActivity());
                    // set
                    tv.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    cb.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    ll2.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    tv.setText(map.get(TAG_NAME));
                    ll2.setOrientation(LinearLayout.HORIZONTAL);                    
                    // add
                    ll2.addView(tv);
                    ll2.addView(cb);
                    content.addView(ll2);

                }
                // Create Spinner
                else if (map.get(TAG_FIELD).equals(dm)) {
                    Log.v("RESPONSE", "About to create a Drop Down Menu");
                    // find
                    LinearLayout content = (LinearLayout) getActivity()
                            .findViewById(R.id.add);
                    // create
                    TextView tv = new TextView(getActivity());
                    LinearLayout ll3 = new LinearLayout(getActivity());
                    ArrayList<String> spinnerArray = new ArrayList<String>();
                    ArrayAdapter<String> aa = new ArrayAdapter<String>(
                            getActivity(),
                            android.R.layout.simple_spinner_dropdown_item,
                            spinnerArray);
                    Spinner spinner = new Spinner(getActivity());
                    // set
                    tv.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT));
                    spinner.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT));
                    ll3.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.MATCH_PARENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    tv.setText(map.get(TAG_NAME));
                    String s = map.get(TAG_VALUE);
                    for (String parts : s.split("\r\n")) {
                        spinnerArray.add(parts);
                        System.out.println(parts);
                    }
                    spinner.setAdapter(aa);
                    ll3.setOrientation(LinearLayout.HORIZONTAL);                    
                    // add
                    ll3.addView(tv);
                    ll3.addView(spinner);
                    content.addView(ll3);
                } else if (map.get(TAG_FIELD).equals(fu)) {
                    Log.v("RESPONSE", "About to create an ImageView");
                    // find
                    LinearLayout content = (LinearLayout) getActivity()
                            .findViewById(R.id.add);
                    // create
                    TextView tv = new TextView(getActivity());
                    LinearLayout ll4 = new LinearLayout(getActivity());
                    ImageButton ib = new ImageButton(getActivity());
                    int ibd = 0;
                    ibd = R.drawable.ic_menu_camera;
                    // set
                    tv.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT));
                    ll4.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT));
                    ib.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT));
                    tv.setText(map.get(TAG_NAME));
                    ib.setImageResource(ibd);
                    ll4.setOrientation(LinearLayout.HORIZONTAL);                    
                    //add
                    ll4.addView(tv);
                    ll4.addView(ib);
                    content.addView(ll4);
                }
            }
        }
    };

我可能从错误的方式开始,但这就是我所处的位置。我需要给EditText一个id以获取用户输入,我需要提供ImageButton和id,以便它可以使用onClick函数执行事件,依此类推向前。你明白了。那你们怎么解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

回答这个问题真的很难。这实际上取决于您想要捕获的数据。在任何情况下,您都不必为元素生成ID,您可以使用Anonymous类设置新的事件侦听器。然后,这些侦听器中的每一个都可以将您的数据保存到某处,具体取决于您的密钥(名称?)。