簡體   English   中英

使用Aquery帶有復選框的歌曲的listview無法在列表向下滾動時保存chekckbox的狀態?

[英]listview of songs with checkbox using Aquery unable to save the State of chekckbox while list scrolldown?

嗨,我有使用Aquery帶有復選框的歌曲的列表視圖,當列表向下滾動時,我無法保存chekckbox的狀態。 我有兩個arraylist,一個用於單擊歌曲圖像,另一個用於復選框,如果用戶選擇了chekbox,則它應根據復選框arraylist播放歌曲。 我也使用過check.setChecked(SelectedBox.get(clickedposition).getisCheck()); 但是沒有幫助

到目前為止,我所做的是在這里

private void createList() {
        listAq = new AQuery(this);
        adapter = new ArrayAdapter<Audio>(SongList.this, R.layout.list_row,details) {
            @Override
            public  View getView(final int position, View convertView,final ViewGroup parent) {
                if (convertView == null) {
                    convertView = getLayoutInflater().inflate(R.layout.list_row, parent, false);
                }
                final int clickedposition = position;
                final AQuery aq = listAq.recycle(convertView);
                Audio item = getItem(position);
                aq.id(R.id.MovieName).text(item.getAlbumName());
                aq.id(R.id.SongName).text(item.getTitle());
                aq.id(R.id.checkBox1).getCheckBox().setSelected(item.getisCheck());
                aq.id(R.id.nameLayout).clicked(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        DialogBuilder(position);
                    }
                });
                 check = (CheckBox) convertView.findViewById(R.id.checkBox1);

                check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                        try {
                            if (isChecked) {
                                checkbox = true;
                                if (details.get(clickedposition).getisCheck() == false) {
                                SelectedBox.add(details.get(clickedposition));
                                System.out.println(SelectedBox.size());
                                details.get(clickedposition).setisCheck(true);
                                }
                            } else {
                                final String name = details.get(clickedposition).getFilename();
                    for (int i = 0; i <= SelectedBox.size(); i++) {
                    if (name.equals(SelectedBox.get(i).getFilename())) {
                                    SelectedBox.remove(i);
                                    details.get(clickedposition).setisCheck(false);

                                    }
                                }
                            }

                            notifyDataSetChanged();
                        }

                        catch (Exception e) {

                            e.getMessage();
                        }
                    }

                });
            try{

            }
            catch (Exception e) {
                // TODO: handle exception
            }
                url = "drawable/" + item.getThumbnail();
                imageResource = getResources().getIdentifier(url, null,getPackageName());
                aq.id(R.id.song_image).image(imageResource);
                if (position != playingValue) {
                    aq.id(R.id.imageplay).invisible();
                    aq.id(R.id.imageplay).getImageView().bringToFront();
                } else {
                    aq.id(R.id.imageplay).visible();
                }
                ImageView img = (ImageView)convertView.findViewById(R.id.song_image);
                img.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        checkbox = false;
                        SelectedBox.clear();
                        currentSongIndex = position;
                        try {
                            if (ChannelService.playerFlag == 0) {
                                playSong(currentSongIndex);
                            } else if ((ChannelService.playerFlag == 1)
                                    || ((ChannelService.playerFlag == 2))) {
                                if (currentSongIndex != playingValue) {
                                    try {
                                        final Intent serviceIntent = new Intent(
                                                getApplicationContext(),
                                                ChannelService.class);
                                        stopService(serviceIntent);
                                        mPlay.setBackgroundResource(R.drawable.play_btn);
                                        playSong(currentSongIndex);
                                    } catch (final IllegalStateException e) {
                                        e.printStackTrace();
                                    }
                                }
                                mPlay.setBackgroundResource(R.drawable.pause_btn);
                                final Intent in = new Intent("updateNotification");
                                sendBroadcast(in);
                            }
                        } catch (final IllegalStateException e) {
                            e.getMessage();
                        }
                        notifyDataSetChanged();
                    }
                });

                return convertView;

            }

        };

        aq.id(R.id.listView1).adapter(adapter);

    }

在Android中向下滾動列表時,它會破壞屏幕中不適合的行。 我一直使用對象數組來保存每一行的狀態,因此當android調用getView時,您可以詢問它們的狀態:

 public class AudioRow{
        public int  id;
        public boolean checked;
        ...
    }

然后在getView可以執行以下操作:

public  View getView(final int position, View convertView,final ViewGroup parent) {
                if (convertView == null) {
                    convertView = getLayoutInflater().inflate(R.layout.list_row, parent, false);
                }
                final int clickedposition = position;
                AudioRow ar = audioRows.get(position);
                if(ar.checked) {
                     //do something;
                }
                 ...                    

                    @Override
                    public void onClick(View v) {
                        if(ar.checked) ar.checked = false;
                        else ar.checked = true;
                        DialogBuilder(position);
                    }
                });

希望對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM