chris
chris

Reputation: 729

Previously selected radio button not working

I am using json parsing, on button's click I have one alert dialog with listview and Radio Button . List is dynamically generated. by default first radio button of list is selected, Now issue is if I select second item and close the dialog , and again when I open it shows first radio button selected instead of second . Following is my code can any one help?

Adapter

 public class CustomListAdapterSize extends BaseAdapter {
        private Context context;

        private LayoutInflater inflater;
        private List<ProdSizes> movieItems;
        private List<ProductPackModel> packItems;
        private RadioButton selected =null;
        private int mSelectedPosition = 0;
        private RadioButton mSelectedRB;
        public CustomListAdapterSize(Context context,List<ProdSizes> movieItems) {
            this.context = context;
            this.movieItems=movieItems;

        }

        @Override
        public int getCount() {
            return movieItems.size();
        }

        @Override
        public Object getItem(int position) {
            return movieItems.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = LayoutInflater.from(context).inflate(com.vetsupply.au.project.R.layout.listitem_productsizes, null);
                holder.txtproname = (TextView) convertView.findViewById(com.vetsupply.au.project.R.id.txtproductsizenames);
                holder.txtproprice = (TextView) convertView.findViewById(com.vetsupply.au.project.R.id.txtproductsizeprice);
                holder.radioBtn = (RadioButton)convertView.findViewById(com.vetsupply.au.project.R.id.productsize_radio);
                convertView.setTag(holder);
            }else{
                holder = (ViewHolder) convertView.getTag();
            }
            // getting movie data for the row
            final ProdSizes m = movieItems.get(position);
            // title
            holder.txtproname.setText(m.getProViews_Size());
            holder.txtproprice.setText("$"+m.getProViews_MinPrice());

            if (position == getCount() - 1) {
                if (selected == null) {
                    holder.radioBtn.setChecked(true);
                    selected = holder.radioBtn;
                    /*for(int i=0;i<movieItems.size();i++)
                    {
                        sizenms =  movieItems.get(i).getProViews_Size();
                    }
*/

                }
            }

            holder.radioBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    if (selected != null) {
                        selected.setChecked(false);
                    }
                    holder.radioBtn.setChecked(true);
                    selected = holder.radioBtn;
                    ids = m.getProViews_ID();
                    sizenms = m.getProViews_Size();
                    System.out.println(">>>>>>>>>>>>>" + ids);
                    System.out.println("<<<<<<<<<<<" + sizenms);
                    dialogf.dismiss();
                }
            });



            return convertView;
        }
        class ViewHolder{

            TextView txtproname,txtproprice;

            public RadioButton radioBtn;
        }

    }

Upvotes: 0

Views: 873

Answers (3)

Mohd Saquib
Mohd Saquib

Reputation: 590

Try in this way....

int mSelectedPosition = -1;

public class CustomListAdapterSize extends BaseAdapter{


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
            // Your Code

            holder.checks.setChecked(position==mSelectedPosition );

            holder.checks.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(isChecked)
                    {
                        mSelectedPosition =  position;
                    }
                    else{
                         mSelectedPosition = -1;
                    }
                    notifyDataSetChanged();
                }
            });
            return convertView;


        }
}

Upvotes: 1

Jeelan
Jeelan

Reputation: 173

Please use Choice Mode and store the position either locally[Shared Preferences] or use to API to store

public class MainActivity extends AppCompatActivity {

    ListView mListView;
    ArrayList<String> mArrayList;
    ArrayAdapter mArrayAdapter;

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

        mListView = (ListView) findViewById(R.id.listView_id);

        mArrayList = new ArrayList();
        mArrayList.add("ONE");
        mArrayList.add("TWO");
        mArrayList.add("THREE");
        mArrayAdapter = new ArrayAdapter(getApplicationContext(),
                android.R.layout.simple_list_item_single_choice,
                mArrayList);
        mListView.setAdapter(mArrayAdapter);
        /***Save your position **/
        int position = 1;//Save your position in Shared preferences or get it from API
        mListView.setItemChecked(position, true);

        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                CheckedTextView textView = (CheckedTextView) view;
                for (int i = 0; i < mListView.getCount(); i++) {
                    if (textView != null) {
                        textView.setTextColor(Color.GREEN);
                    }
                }
                mListView.invalidate();
                textView = (CheckedTextView) view;
                if (textView != null) {
                    textView.setTextColor(Color.BLUE);
                }
            }
        });
    }
}

Please let me know if it helps.

Upvotes: 0

Mohd Saquib
Mohd Saquib

Reputation: 590

Please try this. I think you are not storing position into mSelectedPosition

 private int mSelectedPosition = 0;//declare it publically not locally into your adapter
             if (position == mSelectedPosition ) {
                            if (selected == null) {
                                holder.radioBtn.setChecked(true);
                                selected = holder.radioBtn;
                                /*for(int i=0;i<movieItems.size();i++)
                                {
                                    sizenms =  movieItems.get(i).getProViews_Size();
                                }
            */

                            }
                        }

                        holder.radioBtn.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {

                                if (selected != null) {
                                    selected.setChecked(false);
                                }
                          mSelectedPosition =position;
                                holder.radioBtn.setChecked(true);
                                selected = holder.radioBtn;
                                ids = m.getProViews_ID();
                                sizenms = m.getProViews_Size();
                                System.out.println(">>>>>>>>>>>>>" + ids);
                                System.out.println("<<<<<<<<<<<" + sizenms);
                                dialogf.dismiss();
                            }
                        });

Upvotes: 0

Related Questions