Как обратиться к айтему списка GridAdapter вне его метода, зная его позицию?

100
02 октября 2019, 19:00

Не могу получить нужный мне элемент из ViewHolder'a по позиции, и применить для него некие изменения (заменить background).

Собственно сам класс адаптера:

public class GridAdapter extends ArrayAdapter<String> implements IShowAdListener {
    private static final String TAG = "";
    ArrayList<soundList> soundlist = new ArrayList<soundList>();
    ArrayList<String> str = new ArrayList<String>();
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    PerfectMediaPlayer[] mediaPlayer;
    SeekBar seekBar;
    ViewPager viewPager;
    public static GridAdapter adap;
    SoundDB sdb;
    public static MainActivity av;
    AppCompatActivity compatActivity;
    public int posi;
    public GridAdapter(Context context, int textViewResourceID, ArrayList<String> str, ArrayList<soundList> soundlist, ViewPager viewPager, SoundDB sdb) {
        super(context, textViewResourceID, str);
        this.soundlist = soundlist;
        this.viewPager = viewPager;
        this.str = str;
        adap = this;
        mediaPlayer = new PerfectMediaPlayer[soundlist.size()];
        this.sdb = sdb;
    }
    public void update() {
        notifyDataSetChanged();
    }
    @Override
    public int getCount() {
        return super.getCount();
    }
    @Override
    public View getView(final int position, final View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        View v = convertView;
        if (v == null) {
            v = inflater.inflate(R.layout.grid_lay, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.title = (TextView) v.findViewById(R.id.itext);
            viewHolder.image = (ImageView) v.findViewById(R.id.iimg);
            viewHolder.seekBar1 = (SeekBar) v.findViewById(R.id.seekbar);
            viewHolder.hot_bg = (RoundedImageView) v.findViewById(R.id.hot_bg);
            viewHolder.hot_img = (ImageView) v.findViewById(R.id.hot_img);
            v.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) v.getTag();
        }
        LinearLayout fr = (LinearLayout) v.findViewById(R.id.fr);
        ImageView view = (ImageView) v.findViewById(R.id.bg_gradient);
        viewHolder.title.setText(soundlist.get(position).getTitle());
        viewHolder.image.setImageResource(soundlist.get(position).getIcon());
        int isactive = 0;
        int seekvalue = 0;
        viewHolder.seekBar1.setProgress(soundlist.get(position).getAddMusic());
        for (int i = 0; i < MainActivity.allmedia.size(); i++) {
            int ptype = MainActivity.mediaindex.get(i).getMusictype();
            int pid = MainActivity.mediaindex.get(i).getMusicid();
            int id = MainActivity.mediaindex.get(i).getId();
            String ppath = MainActivity.mediaindex.get(i).getFile_path();
            if (viewPager.getCurrentItem() != 11) {
                if ((ptype == soundlist.get(position).getMusictype()) && (pid == soundlist.get(position).getMusicid())) {
                    isactive = 1;
                    seekvalue = MainActivity.mediaindex.get(i).getAddMusic();
                    mediaPlayer[position] = MainActivity.allmedia.get(i);
                    str.set(position, "pus");
                }
            } else {
                if (id == soundlist.get(position).getId()) {
                    isactive = 1;
                    seekvalue = MainActivity.mediaindex.get(i).getAddMusic();
                    mediaPlayer[position] = MainActivity.allmedia.get(i);
                    str.set(position, "pus");
                }
            }
        }
        if (isactive == 1) {
            viewHolder.seekBar1.setVisibility(View.VISIBLE);
            view.setBackgroundResource(R.drawable.button_rounded_pink);
            viewHolder.seekBar1.setProgress(seekvalue);
        }
        fr.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                seekBar = (SeekBar) v.findViewById(R.id.seekbar);
                LinearLayout fr1 = (LinearLayout) v.findViewById(R.id.fr);
                ImageView view = (ImageView) v.findViewById(R.id.bg_gradient);
                if (seekBar.getVisibility() == View.INVISIBLE) {
                        if (MainActivity.allmedia.size() < 8) {
                            if (mediaPlayer[position] == null) {
                                soundlist.get(position).setAddMusic(seekBar.getProgress());
                                mediaPlayer[position] = PerfectMediaPlayer.create(getContext(), soundlist.get(position).getMusicid());
                                mediaPlayer[position].setVolume(soundlist.get(position).getAddMusic(), soundlist.get(position).getAddMusic());
                                MainActivity.allmedia.add(mediaPlayer[position]);
                                MainActivity.mediaindex.add(soundlist.get(position));
                                seekBar.setProgress(soundlist.get(position).getAddMusic());
                            }
                            seekBar.setVisibility(View.VISIBLE);
                            view.setBackgroundResource(R.drawable.button_rounded_pink);
                            MainActivity.notification_on_off = 1;
                            SoundsActivity.nplay_count = 0;
                            if (mediaPlayer[position] != null)
                                mediaPlayer[position].start();
                        } else {
                            Toast.makeText(getContext(), "", Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        seekBar.setVisibility(View.INVISIBLE);
                        view.setBackgroundResource(R.drawable.button_rounded_shadow);
                        if (mediaPlayer[position] != null) {
                            mediaPlayer[position].stop();
                            mediaPlayer[position].release();
                            mediaPlayer[position] = null;
                            for (int i = 0; i < MainActivity.mediaindex.size(); i++) {
                                if (viewPager.getCurrentItem() != 9) {
                                    if (MainActivity.mediaindex.get(i).getMusicid() == soundlist.get(position).getMusicid()) {
                                        if (MainActivity.mediaindex.get(i).getMusictype() == soundlist.get(position).getMusictype())
                                            MainActivity.mediaindex.remove(i);
                                        MainActivity.allmedia.remove(i);
                                    }
                                } else {
                                    if (MainActivity.mediaindex.get(i).getFile_path() == soundlist.get(position).getFile_path()) {
                                        if (MainActivity.mediaindex.get(i).getMusictype() == soundlist.get(position).getMusictype())
                                            MainActivity.mediaindex.remove(i);
                                        MainActivity.allmedia.remove(i);
                                    }
                                }
                            }
                        }
                    }
                    notifyDataSetChanged();
            }
        });

        switch (soundlist.get(position).getTitle()) {
            case "1":
            case "2":
            case "3":
                viewHolder.hot_bg.setVisibility(View.VISIBLE);
                viewHolder.hot_img.setVisibility(View.VISIBLE);
                fr.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        seekBar = (SeekBar) v.findViewById(R.id.seekbar);
                        LinearLayout fr1 = (LinearLayout) v.findViewById(R.id.fr);
                        ImageView view = (ImageView) v.findViewById(R.id.bg_gradient);
                        if (viewPager.getCurrentItem() == 12) {

                            if (position == (soundlist.size() - 1)) {
                                AddActivity.as = adap;
                                AddActivity.pos = position;
                                Intent intent = new Intent(getContext(), AddActivity.class);
                                getContext().startActivity(intent);
                            } else {
                                if (seekBar.getVisibility() == View.INVISIBLE) {
                                    if (MainActivity.allmedia.size() < 8) {
                                        if (mediaPlayer[position] == null) {
                                            soundlist.get(position).setAddMusic(seekBar.getProgress());
                                            mediaPlayer[position] = PerfectMediaPlayer.create(getContext(), soundlist.get(position).getFile_path());
                                            mediaPlayer[position].setVolume(soundlist.get(position).getAddMusic(), soundlist.get(position).getAddMusic());
                                            MainActivity.allmedia.add(mediaPlayer[position]);
                                            MainActivity.mediaindex.add(soundlist.get(position));
                                            seekBar.setProgress(soundlist.get(position).getAddMusic());
                                        }
                                        seekBar.setVisibility(View.VISIBLE);
                                        view.setBackgroundResource(R.drawable.button_rounded_pink);
                                        MainActivity.notification_on_off = 1;
                                        SoundsActivity.nplay_count = 0;
                                        if (mediaPlayer[position] != null)
                                            mediaPlayer[position].start();
                                    } else {
                                        Toast.makeText(getContext(), "", Toast.LENGTH_SHORT).show();
                                    }
                                } else {
                                    seekBar.setVisibility(View.INVISIBLE);
                                    view.setBackgroundResource(R.drawable.button_rounded_shadow);
                                    if (mediaPlayer[position] != null) {
                                        for (int i = 0; i < MainActivity.allmedia.size(); i++) {
                                            if (mediaPlayer[position] == MainActivity.allmedia.get(i)) {
                                                mediaPlayer[position].stop();
                                                mediaPlayer[position].release();
                                                mediaPlayer[position] = null;
                                                MainActivity.mediaindex.remove(i);
                                                MainActivity.allmedia.remove(i);
                                            }
                                        }
                                    }
                                    if (MainActivity.allmedia.size() == 0)
                                        thisA.stopNotification();
                                }
                                notifyDataSetChanged();
                            }
                        } else {
                            if (seekBar.getVisibility() == View.INVISIBLE) {
                                if (MainActivity.allmedia.size() < 8) {
                                    posi = position;
                                    btmDialog();
                                } else {
                                    Toast.makeText(getContext(), "", Toast.LENGTH_SHORT).show();
                                }
                            } else {
                                seekBar.setVisibility(View.INVISIBLE);
                                view.setBackgroundResource(R.drawable.button_rounded_shadow);
                                if (mediaPlayer[position] != null) {
                                    mediaPlayer[position].stop();
                                    mediaPlayer[position].release();
                                    mediaPlayer[position] = null;
                                    for (int i = 0; i < MainActivity.mediaindex.size(); i++) {
                                        if (viewPager.getCurrentItem() != 9) {
                                            if (MainActivity.mediaindex.get(i).getMusicid() == soundlist.get(position).getMusicid()) {
                                                if (MainActivity.mediaindex.get(i).getMusictype() == soundlist.get(position).getMusictype())
                                                    MainActivity.mediaindex.remove(i);
                                                MainActivity.allmedia.remove(i);
                                            }
                                        } else {
                                            if (MainActivity.mediaindex.get(i).getFile_path() == soundlist.get(position).getFile_path()) {
                                                if (MainActivity.mediaindex.get(i).getMusictype() == soundlist.get(position).getMusictype())
                                                    MainActivity.mediaindex.remove(i);
                                                MainActivity.allmedia.remove(i);
                                            }
                                        }
                                    }
                                }
                            }
                            notifyDataSetChanged();
                        }
                    }
                });
                break;
        }
        return v;
    }

    private void btmDialog() {
        BottomDialog.create(thisA.getSupportFragmentManager())
                .setViewListener(new BottomDialog.ViewListener() {
                    @Override
                    public void bindView(View v) {
                        initView(v); // // You can do any of the necessary the operation with the view
                    }
                })
                .setLayoutRes(R.layout.dialog_layout)
                .setDimAmount(0.2f)            // Dialog window dim amount(can change window background color), range:0 to 1,default is : 0.2f
                .setCancelOutside(true)     // click the external area whether is closed, default is : true
                .setTag("BottomDialog") // setting the DialogFragment tag
                .show();
    }
        @Override
        public void onFinished(String s, FinishState finishState) {
        if (finishState == FinishState.COMPLETED) {
            if (s.equals(Id)) {
                //Выполняем необходимые действия 
                if (mediaPlayer[posi] == null) {
                    soundlist.get(posi).setAddMusic(seekBar.getProgress());
                    mediaPlayer[posi] = PerfectMediaPlayer.create(getContext(), soundlist.get(posi).getMusicid());
                    mediaPlayer[posi].setVolume(soundlist.get(posi).getAddMusic(), soundlist.get(posi).getAddMusic());
                    MainActivity.allmedia.add(mediaPlayer[posi]);
                    MainActivity.mediaindex.add(soundlist.get(posi));
                    seekBar.setProgress(soundlist.get(posi).getAddMusic());
                }
                seekBar.setVisibility(View.VISIBLE);
                MainActivity.notification_on_off = 1;
                SoundsActivity.nplay_count = 0;
                if (mediaPlayer[posi] != null)
                    mediaPlayer[posi].start();
                 // Как поменять нужному itemView из ViewHolder'a по позиции какие либо данные?
                 // Здесь нужно применить строчку которая ниже
                 view.setBackgroundResource(R.drawable.button_rounded_pink);
                 // но как добраться до этого view по позиции?
            }
        }
    }
        private void initView(final View view) {
        final Button button1 = (Button) view.findViewById(R.id.button1);
        final Button button2 = (Button) view.findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               ...
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               ...
            }
        });
    }
       private static class ViewHolder {
        ImageView image;
        TextView title;
        SeekBar seekBar1;
        RoundedImageView hot_bg;
        ImageView hot_img;
    }
}

В методе onFinished() нужно добраться до элемента "view" который определен в методе getView() :

        @Override
        public View getView(final int position, final View convertView, ViewGroup parent) {
            final ViewHolder viewHolder;
            View v = convertView;
            ...
            ImageView view = (ImageView) v.findViewById(R.id.bg_gradient);
            ...
}
            @Override
            public void onFinished(String s, FinishState finishState) {
            if (finishState == FinishState.COMPLETED) {
                if (s.equals(Id)) {
                    //Выполняем необходимые действия 
                    if (mediaPlayer[posi] == null) {
                        soundlist.get(posi).setAddMusic(seekBar.getProgress());
                        mediaPlayer[posi] = PerfectMediaPlayer.create(getContext(), soundlist.get(posi).getMusicid());
                        mediaPlayer[posi].setVolume(soundlist.get(posi).getAddMusic(), soundlist.get(posi).getAddMusic());
                        MainActivity.allmedia.add(mediaPlayer[posi]);
                        MainActivity.mediaindex.add(soundlist.get(posi));
                        seekBar.setProgress(soundlist.get(posi).getAddMusic());
                    }
                    seekBar.setVisibility(View.VISIBLE);
                    MainActivity.notification_on_off = 1;
                    SoundsActivity.nplay_count = 0;
                    if (mediaPlayer[posi] != null)
                        mediaPlayer[posi].start();
                     // Как поменять нужному itemView из ViewHolder'a по позиции какие либо данные?
                     // Здесь нужно применить строчку которая ниже
                     view.setBackgroundResource(R.drawable.button_rounded_pink);
                     // но как добраться до этого view по позиции?
                }
            }
        }

p.s: определять view не из метода getView, а в самом классе адаптера? А как применить view.setBackgroundResource(R.drawable.button_rounded_pink); к определенному элементу списка ViewHolder'a?

Answer 1

Вопрос решился перезагрузкой ViewPager'a из главной активности, и повторной установкой адаптера. По моему мнению, это не самое лучшее решение и выход из данной ситуации.

Добавил в классе GridAdapter'а в нужном для меня методе вызов MainActivity.set_viewp();

Собственно сам метод в главной активности:

    public void set_viewp() {
        final View decorView = getWindow().getDecorView();
        viewPager = ViewFindUtils.find(decorView, R.id.pager);
        activity = this;
        final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        ...
        viewPager.setAdapter(adapter);
        tabLayout = ViewFindUtils.find(decorView, R.id.tl);
        tabLayout.setViewPager(viewPager);
        viewPager.setCurrentItem(0);
        initToolbar();   
    }
READ ALSO
Подготовка изображения средствами nd4j

Подготовка изображения средствами nd4j

Есть код на питоне для подготовки изображения к классификации:

132
Как работает цикл foreach в Java?

Как работает цикл foreach в Java?

Есть коллекция и цикл foreach:

155
Java. read(char [] c, int offset, int len) не срабатывает смещение

Java. read(char [] c, int offset, int len) не срабатывает смещение

Написал метод, который по-идее должен считывать из текстового файла по расположению (path) определенное количество символов (length), со смещением...

113
HashSet и вывод элементов в консоль

HashSet и вывод элементов в консоль

[Petr, Alexandr, Ivan, Dmitriy] вот что я получил в консольПочему вышли значения таким образом, а не по порядку как в ArrayList например?

109