2012-11-02 106 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