当检查另一个radiogroup元素时,无法以编程方式设置RadioGroup

时间:2015-08-13 09:58:29

标签: android android-view android-radiogroup android-radiobutton

我正在尝试以编程方式生成两个RadioGroup。我成功地生成了第一个,但我需要生成第一个无线电组的第二个onCheckedChangeListener。这是我的活动代码。

package com.packr.activities;

import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import com.avast.android.dialogs.fragment.SimpleDialogFragment;
import com.avast.android.dialogs.iface.ISimpleDialogListener;
import com.kbeanie.imagechooser.api.ChooserType;
import com.kbeanie.imagechooser.api.ChosenImage;
import com.kbeanie.imagechooser.api.ImageChooserListener;
import com.kbeanie.imagechooser.api.ImageChooserManager;
import com.packr.R;
import com.packr.adapters.ShipmentsAdapter;
import com.packr.classes.Item;
import com.packr.classes.Packr;
import com.packr.classes.Shipment;
import com.packr.database.DBShipments;
import com.packr.logging.L;

import java.util.ArrayList;

public class ItemDetailsActivity extends AppCompatActivity implements ISimpleDialogListener, ImageChooserListener {
    private Toolbar toolbar;
    private ImageChooserManager imageChooserManager;
    private SeekBar seekBar;
    private Intent intent;
    private RadioGroup itemTypeRadioGroup, deliveryMethod;
    private TextView addImage;
    private Bitmap myBitmap;
    private ShipmentsAdapter mShipmentAdapter;
    private static long back_pressed;
    private MyShipmentsActivity activity;
    private ImageView itemImage;
    private LinearLayout itemDetailsLinearLayout, weightTypeLinearLayout;
    private TextInputLayout itemDescriptionText, quantityText, valueOfItemText;
    private EditText itemDescription, quantity, valueOfItem;
    private TextView weightUnit, weightValue, selectWeight;
    private ArrayList<Shipment> shipmentArrayList = new ArrayList<>();
    private ArrayList<Item> deliveryTypeArrayList = new ArrayList<>();
    private ArrayList<Item> itemTypeArrayList = new ArrayList<>();
    private ArrayList<Item> shipmentTypeArrayList = new ArrayList<>();
    private ArrayList<Item> weightTypeArrayList = new ArrayList<>();
    private String city, state, pincode, recipientName, recipientContact, street, itemType = "", deliveryType = "", route;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_item_details);
        initialize();
        onClick();

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("Item details");
        setSupportActionBar(toolbar);

        deliveryTypeArrayList = Packr.getWritableDatabase().readDeliveryType(DBShipments.DELIVERY_TYPE);
        for (int i = 0; i < deliveryTypeArrayList.size(); i++) {

        }
        itemTypeArrayList = Packr.getWritableDatabase().readDeliveryType(DBShipments.ITEM_TYPE);
        int itemId;

       //first radio group

        RadioButton rb = null;
        float scale = getResources().getDisplayMetrics().density;
        final int dpAsPixels = (int) (10 * scale + 0.5f);
        RadioGroup rg = new RadioGroup(this); //create the RadioGroup
        rg.setOrientation(RadioGroup.HORIZONTAL);//or RadioGroup.VERTICAL
        rg.setPadding(dpAsPixels, dpAsPixels, dpAsPixels, dpAsPixels);


        final Drawable drawableTop = getResources().getDrawable(R.drawable.document_icon);

        for (int i = 0; i < itemTypeArrayList.size(); i++) {
            if (itemTypeArrayList.get(i).getActive() == 1) {
                rb = new RadioButton(this);
                rg.addView(rb); //the RadioButtons are added to the radioGroup instead of the layout
                rb.setText(itemTypeArrayList.get(i).getCode());
                rb.setId(itemTypeArrayList.get(i).getId());
                L.m(itemTypeArrayList.get(i).getId() + "hello");

            }
            if (rb != null) {
                rb.setAllCaps(true);
            }
            assert rb != null;
            rb.setGravity(Gravity.CENTER_VERTICAL);

            rb.setButtonDrawable(null);
            rb.setPadding(dpAsPixels, 0, dpAsPixels, 0);
            rb.setCompoundDrawablesWithIntrinsicBounds(null, drawableTop, null, null);

        }

        itemDetailsLinearLayout.addView(rg);


        final RadioGroup weightTypeRadioGroup = new RadioGroup(this); //create the RadioGroup
        weightTypeRadioGroup.setOrientation(RadioGroup.HORIZONTAL);//or RadioGroup.VERTICAL
        weightTypeRadioGroup.setPadding(dpAsPixels, dpAsPixels, dpAsPixels, dpAsPixels);



        shipmentTypeArrayList = Packr.getWritableDatabase().readDeliveryType(DBShipments.SHIPMENT_TYPE);
        for (int i = 0; i < shipmentTypeArrayList.size(); i++) {

        }


        final RadioButton finalRb = rb;
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (finalRb != null) {
                    checkedId = finalRb.getId();
                    System.out.print(checkedId);
                    L.m(group.getCheckedRadioButtonId() + "");
                    weightTypeArrayList = Packr.getWritableDatabase().readWeightType();
                    for (int i = 0; i < weightTypeArrayList.size(); i++) {
                        L.m(weightTypeArrayList.get(i).getTitle());


                      //second radio group

                        RadioButton weightTypeRadioButton = null;
                        weightTypeRadioButton = new RadioButton(getApplicationContext());
                        weightTypeRadioGroup.addView(weightTypeRadioButton);
                        weightTypeRadioButton.setText(weightTypeArrayList.get(i).getTitle());
                        weightTypeRadioButton.setId(weightTypeArrayList.get(i).getId());

                    }

                    if (weightTypeRadioGroup.getParent() != null){
                        ((ViewGroup)weightTypeRadioGroup.getParent()).removeView(weightTypeRadioGroup);
                        weightTypeLinearLayout.addView(weightTypeRadioGroup);
                    }

                }
            }
        });


        deliveryMethod.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (checkedId == R.id.normalDeliveryRadioButton) {
                    deliveryType = "Normal Delivery";
                } else {
                    deliveryType = "Express Delivery";

                }

            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_item_details, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_done) {
            if (validationCheck()) {
                Shipment shipment = new Shipment();
                shipment.setRecipientName(recipientName);
                shipment.setRecipientContact(recipientContact);
                shipment.setCity(city);
                shipment.setState(state);
                shipment.setStreetNo(street);
                shipment.setRoute(route);
                shipment.setPostalCode(pincode);
                shipment.setItemQuantity(quantity.getText().toString());
                shipment.setItemType(itemType);
                shipment.setDeliveryType(deliveryType);

                shipmentArrayList.add(shipment);

                Packr.getWritableDatabase().insertShipment(shipmentArrayList, false);
                mShipmentAdapter = new ShipmentsAdapter(getApplicationContext(), activity);
                mShipmentAdapter.setShipmentArrayList(shipmentArrayList);
                Intent intent = new Intent(ItemDetailsActivity.this, MyShipmentsActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                finish();
            }
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void initialize() {
        intent = getIntent();
        recipientName = intent.getStringExtra("recipientName");
        recipientContact = intent.getStringExtra("recipientContact");
        city = intent.getStringExtra("city");
        state = intent.getStringExtra("state");
        pincode = intent.getStringExtra("pincode");
        street = intent.getStringExtra("street");
        route = intent.getStringExtra("route");

        deliveryMethod = (RadioGroup) findViewById(R.id.radioGroupShippingMethod);
        selectWeight = (TextView) findViewById(R.id.selectWeight);
        addImage = (TextView) findViewById(R.id.addImage);
        itemImage = (ImageView) findViewById(R.id.item_image);
        itemDescriptionText = (TextInputLayout) findViewById(R.id.item_description_text_input_layout);
        quantityText = (TextInputLayout) findViewById(R.id.item_quantity_text_input_layout);
        valueOfItemText = (TextInputLayout) findViewById(R.id.item_value_text_input_layout);
        itemDescription = (EditText) findViewById(R.id.item_description_edit_text);
        quantity = (EditText) findViewById(R.id.item_quantity_edit_text);
        valueOfItem = (EditText) findViewById(R.id.item_value_edit_text);
        itemDetailsLinearLayout = (LinearLayout) findViewById(R.id.itemDetailsLinearLayout);
        weightTypeLinearLayout = (LinearLayout) findViewById(R.id.weightTypeRadioButton);

    }

    public void onClick() {
        addImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SimpleDialogFragment.createBuilder(getApplicationContext(), getSupportFragmentManager()).setTitle("Choose item image").setMessage(R.string.selectImage).setNegativeButtonText("Gallery").setPositiveButtonText("Camera").show();
            }
        });
    }

    public Boolean validationCheck() {
        if (itemDescription.getText().length() == 0) {
            itemDescriptionText.setErrorEnabled(true);
            itemDescriptionText.setError("Please provide an item description");
        } else if (quantity.getText().length() == 0) {
            quantityText.setErrorEnabled(true);
            quantityText.setError("Provide item quantity");
        } else if (valueOfItem.getText().length() == 0) {
            valueOfItemText.setErrorEnabled(true);
            valueOfItemText.setError("Please provide value of item");
        } else {
            return true;
        }
        return false;
    }

    public void chooseImage() {
        imageChooserManager = new ImageChooserManager(this,
                ChooserType.REQUEST_PICK_PICTURE);
        imageChooserManager.setImageChooserListener(this);
        try {
            imageChooserManager.choose();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void snapImage() {
        imageChooserManager = new ImageChooserManager(this, ChooserType.REQUEST_CAPTURE_PICTURE);
        imageChooserManager.setImageChooserListener(this);
        try {
            imageChooserManager.choose();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    @Override
    public void onNegativeButtonClicked(int i) {
        chooseImage();
    }

    @Override
    public void onNeutralButtonClicked(int i) {

    }

    @Override
    public void onPositiveButtonClicked(int i) {
        snapImage();
    }

    @Override
    public void onImageChosen(ChosenImage chosenImage) {

        myBitmap = BitmapFactory.decodeFile(chosenImage.getFileThumbnail());
        runOnUiThread(new Runnable() {
            public void run() {
                itemImage.setImageBitmap(myBitmap);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK &&
                (requestCode == ChooserType.REQUEST_PICK_PICTURE ||
                        requestCode == ChooserType.REQUEST_CAPTURE_PICTURE)) {
            imageChooserManager.submit(requestCode, data);
        }
    }


    @Override
    public void onError(String s) {

    }

    @Override
    public void onBackPressed() {
        AlertDialog.Builder alert = new AlertDialog.Builder(ItemDetailsActivity.this);
        alert.setTitle("Cancel shipment");
        alert.setMessage("Are you sure?");
        alert.setPositiveButton("YES", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(ItemDetailsActivity.this, MyShipmentsActivity.class);
                startActivity(intent);
                finish();
            }
        });
        alert.setNegativeButton("NO", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //Cancel
            }
        });
        alert.show();
    }
}

以下是我的布局xml文件的代码。

<RelativeLayout
    android:focusableInTouchMode="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    tools:context="com.packr.activities.ItemDetailsActivity"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto">

   <include
       android:id="@+id/toolbar"
       layout="@layout/toolbar"/>

    <ScrollView
        android:layout_below="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView"
       >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingBottom="80dp">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="What are you sending?"
                android:fontFamily="sans-serif-light"
                android:padding="20dp"
                android:textColor="@color/textColorPrimary"/>


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


            </LinearLayout>


            <LinearLayout
                tools:visibility="visible"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                tools:ignore="UseCompoundDrawables">

               <ImageView
                   android:id="@+id/item_image"
                   android:layout_width="200dp"
                   android:layout_height="wrap_content"
                   android:src="@drawable/image_background"
                   android:layout_margin="16dp"
                   android:contentDescription="@string/product_image" />

                <TextView
                    android:id="@+id/addImage"
                    android:padding="20dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Add an image"
                    android:layout_gravity="center"
                    android:layout_marginLeft="10dp"
                    android:textColor="@color/textColorSecondary"
                    />
            </LinearLayout>


            <android.support.design.widget.TextInputLayout
                android:id="@+id/item_description_text_input_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                tools:visibility="gone"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp">
                <EditText
                    android:id="@+id/item_description_edit_text"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/item_description"
                    android:inputType="textMultiLine"
                    android:imeOptions="flagNoFullscreen"
                    android:lines="5"/>
            </android.support.design.widget.TextInputLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/selectWeight"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="18sp"
                    android:text="Permitted weight"
                    android:fontFamily="sans-serif-light"
                    android:padding="20dp"/>


            </RelativeLayout>

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


            </LinearLayout>


            <android.support.design.widget.TextInputLayout
                android:id="@+id/item_quantity_text_input_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                tools:visibility="visible"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp">
                <EditText
                    android:id="@+id/item_quantity_edit_text"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/itemQuantity"
                    android:inputType="number" />
            </android.support.design.widget.TextInputLayout>

            <android.support.design.widget.TextInputLayout
                android:id="@+id/item_value_text_input_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                tools:visibility="visible"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp">
                <EditText
                    android:id="@+id/item_value_edit_text"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/item_value"
                    android:inputType="number"
                    android:imeOptions="flagNoFullscreen"/>
            </android.support.design.widget.TextInputLayout>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Choose shipping method"
                android:fontFamily="sans-serif-light"
                android:textColor="@color/textColorPrimary"
                android:layout_marginLeft="25dp"
                android:layout_marginStart="25dp"
                android:layout_marginTop="25dp"/>

            <RadioGroup
                android:id="@+id/radioGroupShippingMethod"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:padding="20dp">

                <RadioButton
                    android:id="@+id/normalDeliveryRadioButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Normal Delivery"
                    android:checked="true"/>
                <RadioButton
                    android:id="@+id/expressDeliveryRadioButton"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Express Delivery"/>

            </RadioGroup>

        </LinearLayout>
    </ScrollView>



    //This contains the layout for the bottom price bar //


<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@color/textColorPrimary"
    android:padding="12dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true">

        <TextView
            android:id="@+id/priceText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Price"
            android:textSize="18sp"
            android:fontFamily="sans-serif-light"
            android:textColor="@color/white"/>

        <TextView
            android:id="@+id/equals"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/equals"
            android:textSize="18sp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:textColor="@color/white"/>

        <TextView
            android:id="@+id/Rs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/Rs"
            android:textSize="18sp"
            android:fontFamily="sans-serif-light"
            android:layout_marginRight="10dp"
            android:layout_marginEnd="10dp"
            android:textColor="@color/white"/>

        <TextView
            android:id="@+id/calculatedPrice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="550"
            android:textSize="18sp"
            android:fontFamily="sans-serif-light"
            android:layout_marginRight="10dp"
            android:layout_marginEnd="10dp"
            android:textColor="@color/white"/>

    </LinearLayout>
</RelativeLayout>

</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

你不只是需要在onCheckChangedListener中重复相同的进程吗?

 rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
      //Create another radio group here
      //then add it to the view       
        RadioGroup rg2 = new RadioGroup(this); //create the RadioGroup
        rg2.setOrientation(RadioGroup.HORIZONTAL);//or RadioGroup.VERTICAL
        rg2.setPadding(dpAsPixels, dpAsPixels, dpAsPixels, dpAsPixels);


        final Drawable drawableTop = getResources().getDrawable(R.drawable.document_icon);

        for (int i = 0; i < itemTypeArrayList.size(); i++) {
            if (itemTypeArrayList.get(i).getActive() == 1) {
                rb = new RadioButton(this);
                rg2.addView(rb); //the RadioButtons are added to the radioGroup instead of the layout
                rb.setText(itemTypeArrayList.get(i).getCode());
                rb.setId(itemTypeArrayList.get(i).getId());

            }    
        }

        itemDetailsLinearLayout.addView(rg);
    }
});

您可能需要在类的顶部声明rg2 public,以便onCheckChangedListener可以访问它