Boopathi
Boopathi

Reputation: 281

Creating seekbar dynamically and giving listeners for that but it is not working properly

I am inflating the seekbar dynamically,but if i press the first seekbar, listener changing the values from last seek bar only .

for (int i = 0; i < controlList.size(); i++) {
            view1 = seekbar_inflate.inflate(R.layout.mysxm_control_coloumn, null, false);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            FrameLayout frame = (FrameLayout) view1
                    .findViewById(R.id.sliderLayout);
            vertical_seekbar=new VerticalSeekBar(MyApplication.getAppContext());
            vertical_seekbar.setId(i);
            final int id = vertical_seekbar.getId();
            vertical_seekbar.setProgressDrawable(getResources().getDrawable(R.drawable.sxm_selector_column));
            frame.addView(vertical_seekbar, params);
            vertical_seekbar=(VerticalSeekBar)view1.findViewById(id);
            equalizer_view.addView(view1);
            vertical_seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                @Override
                public void onProgressChanged(SeekBar seekBar,
                        int progress, boolean arg2) {


                }

                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {

                }

                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {


                }
            });
        }

how to give the listeners for each seek bar? pls suggest some answer

Upvotes: 0

Views: 1581

Answers (2)

Boopathi
Boopathi

Reputation: 281

Just slight modification in my code,In this what i have realized android every widgets working based on id only.In this code you can differentiate the seekbar variable like vertical_seekbar and vertical_seekbar1 for me this the solution.Still this solution very strange for me.

for (int i = 0; i < controlList.size(); i++) {
                view1 = seekbar_inflate.inflate(R.layout.mysxm_control_coloumn, null, false);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                FrameLayout frame = (FrameLayout) view1
                        .findViewById(R.id.sliderLayout);
                vertical_seekbar=new VerticalSeekBar(MyApplication.getAppContext());
                vertical_seekbar.setId(i);
                final int id = vertical_seekbar.getId();
                vertical_seekbar.setProgressDrawable(getResources().getDrawable(R.drawable.sxm_selector_column));
                frame.addView(vertical_seekbar, params);
                vertical_seekbar1=(VerticalSeekBar)view1.findViewById(id);
                equalizer_view.addView(view1);
                vertical_seekbar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                    @Override
                    public void onProgressChanged(SeekBar seekBar,
                            int progress, boolean arg2) {


                    }

                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {

                    }

                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {


                    }
                });
            }

Upvotes: 1

Suhail Mehta
Suhail Mehta

Reputation: 5542

Make vertical_seekbar and view1 as local variables. You have made them as instance so they only persist the value of last iteration, that's why your last seek bar is only working.

for (int i = 0; i < controlList.size(); i++) {
            View view1 = seekbar_inflate.inflate(R.layout.mysxm_control_coloumn, null, false);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            FrameLayout frame = (FrameLayout) view1
                    .findViewById(R.id.sliderLayout);
            VerticalSeekBar vertical_seekbar=new VerticalSeekBar(MyApplication.getAppContext());
            vertical_seekbar.setId(i);
            final int id = vertical_seekbar.getId();
            vertical_seekbar.setProgressDrawable(getResources().getDrawable(R.drawable.sxm_selector_column));
            frame.addView(vertical_seekbar, params);
            vertical_seekbar=(VerticalSeekBar)view1.findViewById(id);
            equalizer_view.addView(view1);
            vertical_seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                @Override
                public void onProgressChanged(SeekBar seekBar,
                        int progress, boolean arg2) {


                }

                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {

                }

                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {


                }
            });
        }

Upvotes: 1

Related Questions