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



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

我正在从JSON响应以编程方式创建一个ui。这个应用程序将加载未知数量的问题和答案。我使用循环和条件语句来为ui创建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("rn")) {
                        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("rn")) {
                        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函数执行事件,等等。我相信你明白我的意思。那么你们会如何解决这个问题呢?

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

最新更新