다른 모든 간단한 질문을 살펴 보았지만 찾고 있던 대답을 찾을 수 없습니다. ListView가 있고 각 목록 항목에 토글 단추가 있습니다. 두 가지 질문이 있습니다.ListView 및 ToggleButton
목록을 스크롤 할 때 목록 항목 중 하나의 토글 단추를 누르면 항목이 재활용됩니다. 첫 번째 항목을 클릭했다 (한 번에 3 개만 표시됨). 네 번째 셀마다 전환 버튼이 켜져 있음
전환 버튼이기 때문에 하나의 버튼 인스턴스 만 켜기를 원합니다. , 단일 목록 항목이 켜져있는 경우 ToggleButton이 켜져있는 ListView의 다른 항목은 모두 해제되어야합니다.
어떤 도움을 주시면 감사하겠습니다. 내 어댑터 코드는 다음과 같습니다.
public class RSSFeedItemListAdapter extends ArrayAdapter<RSSItem> {
private Context context;
private List<RSSItem> items;
private int resource;
private Podcast podcast;
private boolean[] playpauseState;
public RSSFeedItemListAdapter(Context context, int resource, List<RSSItem> items, Podcast podcast) {
super(context, resource, items);
this.items = items;
this.context = context;
this.resource = resource;
this.podcast = podcast;
playpauseState = new boolean[this.items.size()];
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Viewholder vh;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(resource, parent, false);
Typeface custom_font = Typeface.createFromAsset(context.getAssets(), "fonts/RobotoCondensed-Bold.ttf");
vh = new Viewholder();
vh.title = (TextView) convertView.findViewById(R.id.podcast_feeditem_title);
vh.title.setTypeface(custom_font);
vh.desc = (TextView) convertView.findViewById(R.id.podcast_feeditem_description);
vh.image = (ImageView) convertView.findViewById(R.id.podcast_feeditem_image);
vh.pubDate = (TextView) convertView.findViewById(R.id.podcast_feeditem_pubdate);
vh.collectionName = (TextView) convertView.findViewById(R.id.podcast_feeditem_collection_name);
vh.playpause = (ToggleButton) convertView.findViewById(R.id.podcast_feeditem_play_pause_cta);
vh.playpause.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int position = (Integer) buttonView.getTag();
playpauseState[position] = isChecked;
}
});
convertView.setTag(vh);
} else {
vh = (Viewholder) convertView.getTag();
}
vh.playpause.setChecked(playpauseState[position]);
vh.playpause.setTag(position);
RSSItem rssItem = items.get(position);
vh.title.setText(rssItem.getTitle());
vh.desc.setText(Jsoup.parse(rssItem.getDescription()).text());
Picasso.with(context).load(podcast.getArtworkExtraLarge()).into(vh.image);
// TODO detect the local and show the right format
// TODO the date format should match the date format from the rssfeedhandler code
if (rssItem.getPubDate() != null) {
vh.pubDate.setText(vh.simpleDateFormat.format(rssItem.getPubDate()));
}
// vh.playpause.setChecked(playpauseState[position]);
vh.collectionName.setText(podcast.getCollectionName());
return convertView;
}
/**
*
*/
static class Viewholder {
ImageView image;
TextView title;
TextView desc;
TextView pubDate;
TextView collectionName;
ToggleButton playpause;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d MMM", Locale.UK);
}
귀하의 코드가 먼저 눈에 확인 외모에 내놓고 또는 설정, 나는이 문제를 볼 수 없습니다. 버튼의 태그를 통해 전달하는 동안 getView() 매개 변수에서 'position'변수를 사용하는 것을 선호하지만 vh.playpause.setTag (Integer.valueOf (position))로 변경합니다. int가 기본적으로 Integer로 변환되었는지 또는 int 인수가있는 setTag 메서드가 있는지 확실하지 않습니다. 난 IDE에서 코드를 디버깅하는 것이 좋습니다 – Mixaz
내가 생각하는 설정 togglebutton 체크 안드로이드에 대한 버그입니다. 모든 것을 사실로 설정해보십시오. 해결 방법은 이미지 뷰를 사용하고 확인 된 상태에 대해 다른 이미지를 설정하는 것입니다. – MD1948
문제는 여전히 작동하지 않는다는 것입니다. 나는 둘 다 시도했다. – RnP