2012-11-02 169 views
1

以下是我的布局xmls。现在我们在布局(listitem.xml)中具有有限数量(七个)的复选框。我们将其添加到线性布局中。android动态添加复选框

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFF" 
    > 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="21dp" 
     android:layout_marginTop="38dp" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/linearLayout1" 
      android:layout_alignLeft="@+id/linearLayout1" 
      android:text="TESTER : " 
      android:textColor="#000000" /> 

     <AutoCompleteTextView 
      android:id="@+id/tester_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" 
      android:capitalize="characters" 
      android:textColor="#000000"> 

      <requestFocus /> 
     </AutoCompleteTextView> 

    </LinearLayout> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/linearLayout1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="19dp" 
     android:text="APPS TO TEST : " 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textColor="#000000"/> 




    <View 
     android:id="@+id/view1" 
     android:layout_width="wrap_content" 
     android:layout_height="1dp" 
     android:layout_below="@+id/textView2" 
     android:background="#CCCCCC" 
     android:layout_marginBottom="5dp"/> 

    <ListView 
     android:id="@+id/apps_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/view1" 
     android:dividerHeight="5dp"> 
    </ListView> 

    <Button 
     android:id="@+id/refreshBtn" 
     android:layout_width="wrap_content" 
     android:layout_height="40dp" 
     android:layout_alignBottom="@+id/textView2" 
     android:layout_alignParentLeft="true" 
     android:text="Refresh" /> 

</RelativeLayout> 

listitem.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFF" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/app_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="70" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="#000000" /> 

     <Button 
      android:id="@+id/launch_btn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="4dp" 
      android:layout_weight="20" 
      android:text="LAUNCH" /> 
    </LinearLayout> 

    <RadioGroup 
     android:id="@+id/status_group" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <RadioButton 
      android:id="@+id/pass_btn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:checked="true" 
      android:text="PASS" 
      android:textColor="#000000" /> 

     <RadioButton 
      android:id="@+id/fail_btn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="FAIL" 
      android:textColor="#000000" /> 
    </RadioGroup> 

    <LinearLayout 
     android:id="@+id/failure_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:gravity="center" 
      android:text="FAILURE REASONS" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="#000000" /> 

     <LinearLayout 
      android:id="@+id/failure_reasonslist" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:orientation="vertical" > 

      <CheckBox 
       android:id="@+id/failure_Sound" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="#000000" /> 

      <CheckBox 
       android:id="@+id/failure_GPS" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:focusable="false" 
       android:focusableInTouchMode="false" 
       android:textColor="#000000" /> 

      <CheckBox 
       android:id="@+id/failure_Display" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:focusable="false" 
       android:focusableInTouchMode="false" 
       android:textColor="#000000" /> 

      <CheckBox 
       android:id="@+id/failure_Network" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:focusable="false" 
       android:focusableInTouchMode="false" 
       android:textColor="#000000" /> 

      <CheckBox 
       android:id="@+id/failure_Rotation" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:focusable="false" 
       android:focusableInTouchMode="false" 
       android:textColor="#000000" /> 

      <CheckBox 
       android:id="@+id/failure_Microphone" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:focusable="false" 
       android:focusableInTouchMode="false" 
       android:textColor="#000000" /> 

      <CheckBox 
       android:id="@+id/failure_Others" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:focusable="false" 
       android:focusableInTouchMode="false" 
       android:textColor="#000000" /> 
     </LinearLayout> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/lineatlayout1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="DESCRIPTION : " 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="#000000" /> 

     <EditText 
      android:id="@+id/description_text" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:clickable="true" 
      android:ems="10" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:inputType="textMultiLine" 
      android:textColor="#000000" > 
     </EditText> 
    </LinearLayout> 
<LinearLayout 
     android:id="@+id/lineatlayout2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 
    <Button 
     android:id="@+id/submit_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text=" SUBMIT " /> 
    <Button 
     android:id="@+id/uninstall_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="UNINSTALL" /> 
    </LinearLayout> 

    <!-- </RelativeLayout> --> 

</LinearLayout> 

但是按照新的要求,我们需要动态地添加的复选框。就像需要从API调用中获取选项一样,并将其转换为视图中的复选框。我花了很多时间。有人可以建议一种方法来解决这个问题。

我们的布局应该是这样的。在列表视图中,我们正在显示员工详细信息,并且对于每个员工记录,应该从API调用或数据库加载限定。

 [Reviewer Name (Editable)]  
       Employee Lest   
--------------------------------------- 
Employee1     [Click Me] 

Male (0)   Female () 
Salary : [5999 (editable)] 
Qualification 
[X]BA 
[ ]BSc 
[ ]Matriculation 
[ ]Other 
[Submit Button] 
--------------------------------------- 
Employee2     [Click Me] 

Male (0)   Female () 
Salary : [5999 (editable)] 
Qualification 
[X]BA 
[ ]BSc 
[ ]Matriculation 
[ ]Other 
[Submit Button] 
--------------------------------------- 
Employee3     [Click Me] 

Male (0)   Female () 
Salary : [5999 (editable)] 
Qualification 
[X]BA 
[ ]BSc 
[ ]Matriculation 
[ ]Other 
[Submit Button] 
--------------------------------------- 

的源代码

private class ListAdapters extends ArrayAdapter<ApplicationBean> { 
    private ArrayList<ApplicationBean> items; 
    private int position; 

    public ListAdapters(Context context, int textViewResourceId, 
      ArrayList<ApplicationBean> mTitleList) { 
     super(context, textViewResourceId, mTitleList); 
     this.items = mTitleList; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     this.position = position; 
     if (v == null) { 
      LayoutInflater inflater = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.applicationlistitem, null); 
     } 

     final ApplicationBean o = (ApplicationBean) items.get(position); 

     if (o != null) { 

      txtAppName = (TextView) v.findViewById(R.id.app_name); 
      txtAppName.setText("" + o.getAppName()); 
      launchButton = (Button) v.findViewById(R.id.launch_btn); 
      launchButton.setTag(position); 
      launchButton.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        final PackageManager pm = mContext.getPackageManager(); 
        Intent LaunchIntent = pm 
          .getLaunchIntentForPackage(items 
            .get(Integer.parseInt(v.getTag() 
              .toString())).getPname()); 
        mContext.startActivity(LaunchIntent); 

       } 
      }); 
      final LinearLayout failure_reasonslist = (LinearLayout) v 
        .findViewById(R.id.failure_reasonslist); 

      rdgPassFail = (RadioGroup) v.findViewById(R.id.status_group); 
      rdgPassFail.setTag(position); 

      RadioButton passBtn = (RadioButton) v 
        .findViewById(R.id.pass_btn); 
      passBtn.setTag(position); 
      RadioButton failbtn = (RadioButton) v 
        .findViewById(R.id.fail_btn); 
      failbtn.setTag(position); 

      rdgPassFail 
        .setOnCheckedChangeListener(new OnCheckedChangeListener() { 

         @Override 
         public void onCheckedChanged(RadioGroup group, 
           int checkedId) { 
          ApplicationBean o = (ApplicationBean) items 
            .get(Integer.parseInt(group.getTag() 
              .toString())); 

          switch (checkedId) { 
          case R.id.fail_btn: 
           Log.e("Fail button", "Clicked"); 
           o.setFailState(true); 
           o.setPassState(false); 
           numOptions = 0; 
           Log.e("Fail button--1", "Clicked"); 

           break; 
          case R.id.pass_btn: 
           Log.e("Pass button", "Clicked"); 

           o.setFailState(false); 
           o.setPassState(true); 
           Log.e("Pass button-----1", "Clicked"); 

           break; 
          } 
          items.set(Integer.parseInt(group.getTag() 
            .toString()), o); 
         } 

        }); 

      LinearLayout featuresTable = (LinearLayout) v.findViewById(R.id.failure_reasonslist); 

      // use loop CheckBox feature1 = new CheckBox(this); 
      for(int i = 0; i<=5; i++) { 
       CheckBox feature1 = new CheckBox(this.getContext()); 
       featuresTable.addView(feature1); 
      } 




      txtDescription = (EditText) v 
        .findViewById(R.id.description_text); 
      txtDescription.setTag(position); 
      if (txtDescription.isFocused()) { 
       InputMethodManager inputManager = (InputMethodManager) mContext 
         .getSystemService(INPUT_METHOD_SERVICE); 
       inputManager.restartInput(txtDescription); 
      } 

      txtDescription 
        .setOnFocusChangeListener(new View.OnFocusChangeListener() { 

         @Override 
         public void onFocusChange(View v, boolean hasFocus) { 
          if (!hasFocus) { 

           final EditText Caption = (EditText) v; 
           o.setDescription(Caption.getText() 
             .toString()); 

          } 

         } 
        }); 
      uninstallButton = (Button) v.findViewById(R.id.uninstall_btn); 
      uninstallButton.setTag(position); 
      // uninstallButton.setVisibility(View.INVISIBLE); 
      o.setUninstallVisible(false); 
      uninstallButton.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Uri packageUri = Uri.parse("package:" 
          + items.get(
            Integer.parseInt(v.getTag().toString())) 
            .getPname()); 
        Intent uninstallIntent = new Intent(
          Intent.ACTION_DELETE, packageUri); 
        uninstallIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(uninstallIntent); 
        mTitleList.remove(items.get((Integer) v.getTag())); 

        mListView.setAdapter(new ListAdapters(mContext, 
          R.id.app_name, mTitleList)); 
        ((BaseAdapter) mListView.getAdapter()) 
          .notifyDataSetChanged(); 
        isUninstallclicked = true; 

       } 
      }); 

      submitButton = (Button) v.findViewById(R.id.submit_btn); 
      submitButton.setTag(txtDescription); 
      submitButton.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        EditText tv = (EditText) v.getTag(); // get edittext 
                  // object 

        txtDescription = tv; 
        if (txtTesterName.getText().toString().equals("")) { 
         showDialog("Please enter the name of tester", 
           mContext); 
        } else if (numOptions == 0) { 
         showDialog("Please select failure reason", mContext); 
        } else if (tv.getText().toString().equals("")) { 
         showDialog("Please enter the description", mContext); 
        } else if (!isNetworkAvailable()) { 

         showDialog(
           "No network connection.Report won't be submitted", 
           mContext); 
        } else { 

         if (!o.isUninstallVisible()) { 
          uninstallButton.setVisibility(View.VISIBLE); 
          o.setUninstallVisible(true); 
          mListView.invalidate(); 
         } 
         PostRequest p = new PostRequest(Integer.parseInt(tv 
           .getTag().toString())); 
         p.execute(); 

        } 
       } 

      }); 

     } 
     return v; 
    } 

回答

7
LinearLayout featuresTable = (LinearLayout) findViewById(R.id.failure_reasonslist); 
// use loop 
CheckBox feature1 = new CheckBox(this); 
featuresTable.addView(feature1); 
+0

感谢您的回答。我曾试过这种方式。 LinearLayout featuresTable =(LinearLayout)v.findViewById(R.id.failure_reasonslist); for(int i = 0; i <= 5; i ++){CheckBox feature1 = new CheckBox(this.getContext()); featuresTable.addView(特征1); }但是对于第一行,它创建了多于6个复选框。第二行和其他行的复选框的数量是6.但是,当我向后滚动复选框的数量正在增加。任何线索? – developerXXX

0

试试这个。

LinearLayout lLayout = (LinearLayout)findViewById(R.id.yourMainLayout); 
CheckBox checkBox = new CheckBox(this); // Here you will create CheckBox as many number of Checkbox you want. 

lLayout.addView(checkBox); // Here you have to add this CheckBox to your layout. 

好运。

+0

感谢您的回答。我曾试过这种方式。 LinearLayout featuresTable =(LinearLayout)v.findViewById(R.id.failure_reasonslist); for(int i = 0; i <= 5; i ++){CheckBox feature1 = new CheckBox(this.getContext()); featuresTable.addView(特征1); }但是对于第一行,它创建了多于6个复选框。第二行和其他行的复选框的数量是6.但是,当我向后滚动复选框的数量正在增加。任何线索? – developerXXX

+0

您可以发布您的代码,以便我可以从中检出某些内容。 – Akshay

+0

我编辑了我的问题并发布了我的源代码。你能检查一下吗? – developerXXX