第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在通過列表視圖檢查動態(tài)生成復(fù)選框時獲取問題

在通過列表視圖檢查動態(tài)生成復(fù)選框時獲取問題

人到中年有點甜 2019-06-26 13:54:55
在通過列表視圖檢查動態(tài)生成復(fù)選框時獲取問題我知道這個問題已經(jīng)被其他議員問過了,也有一些議員給出了解決辦法,但問題是我沒有找到適合我的應(yīng)用程序的解決方案。我正在創(chuàng)建一個應(yīng)用程序,其中我有一個屏幕,它將顯示動態(tài)列表視圖和列表項,一個復(fù)選框和三個文本視圖(一個用于候選名稱,另兩個用于時鐘和時鐘輸出時間,它們將在按日期選擇時間選擇后顯示)?,F(xiàn)在,我的問題是,當(dāng)我選中第一個復(fù)選框(我有15個帶有復(fù)選框的候選人姓名)時,自動第10個復(fù)選框檢查自己,這也發(fā)生在第二、第十一、第三和第十二等(反過來說也是真的)。在這里,我提供我的適配器類和列表項XML。import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Context;import android.util.SparseBooleanArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.TextView;import android.widget.Toast;import com.android.feedback.ListViewCheckBox;public class DemoAdapter extends ArrayAdapter<String>{     private final List<String> list;     private final Activity context;     LayoutInflater inflater;     TextView CItv,COtv;     static ViewHolder holder;     View view;     public DemoAdapter(Activity context, List<String> list) {         super(context, R.layout.test_listitems,list);         // TODO Auto-generated constructor stub         this.context = context;         this.list = list;     }     static class ViewHolder {         protected TextView text,CItv,COtv;         protected CheckBox checkbox;     }請幫助我解決這個問題。(ListViewCheckBox是一個類,它生成列表并將日期和時間的值存儲在變量DT_SELECT和OutDT_SELECT中)。
查看完整描述

3 回答

?
翻閱古今

TA貢獻(xiàn)1780條經(jīng)驗 獲得超5個贊

下面是回收的實際想法和過程,這樣您就可以知道您的實現(xiàn)和想法有什么問題。getView(也許其他人也會發(fā)現(xiàn)這個問題和答案)。請參閱下面的代碼示例,只需忽略類型部分,因為這是附加信息。

  • 第一階段:為循環(huán)再造而制作的物品(convertViewnull):
    這意味著創(chuàng)建布局和所有項共享的公共狀態(tài)。如果您有偵聽器,您可以在這里添加它們,并設(shè)計它們,以便它們能夠在以后的位置更改(當(dāng)它被重用時)作出反應(yīng)。因此,例如,通過將位置設(shè)置為相應(yīng)視圖上的標(biāo)記,監(jiān)聽器可以捕獲該信息,并知道它當(dāng)前操作的項目。不能使用視圖存儲數(shù)據(jù)。因此,當(dāng)偵聽器更改列表項上的狀態(tài)時,應(yīng)將此數(shù)據(jù)持久化(在數(shù)據(jù)數(shù)組中、SQLite數(shù)據(jù)庫中等),并在第二階段.

  • 第二階段:設(shè)置給定位置的項目狀態(tài):
    設(shè)置項目的可視狀態(tài)。對于某一項可能單獨更改的所有內(nèi)容(文本、復(fù)選框狀態(tài)、顏色等)都必須在這里設(shè)置。不僅更改了當(dāng)前項的內(nèi)容,而且還可能被另一項更改。通過這種方式,可以確保視圖不用于無效狀態(tài),因為它以前是從另一個列表項中重用的。


被指控的答案被刪除/編輯,但建議執(zhí)行getItemViewTypegetViewTypeCount因此,每個列表項都有自己的視圖類型。編輯的答案現(xiàn)在展示了如何用這里描述的方式來解決這個問題。

重新實施getItemViewTypegetViewTypeCount有效,但您顯然誤解了它的用法(請參閱下面的示例和/或這個答案).

這兩種方法用于使用完全不同的兩個(或多個)列表項(例如,公共列表項和僅包含標(biāo)題的分隔符),而不是避免回收可重用的視圖。

如果您使用它們來解決您的問題,您可能不理解我之前解釋過的過程。例如,您有1000個項,然后執(zhí)行視圖類型黑客然后,您將創(chuàng)建1000個視圖(層次結(jié)構(gòu)),而可能會創(chuàng)建10個可重用的視圖。容易..如果你只有20件左右的物品,那就沒那么重要了,但是如果你把這種技術(shù)用于大清單,你只是在浪費(寶貴的)內(nèi)存!

下面是一個例子:

void getItemViewType(int position) {
    return isItemAtPositionSeperator(position) ? 1 : /* normal item */ 0;}void int getViewTypeCount() {
    return 2; // normal item and separator}void View getView(int position, View convertView, ViewGroup parent) {
    int type = getItemViewType(position);

    // phase 1: see my explanation 
    if (convertView == null) {
        if (type == 0) {
            // setup your common item view - inflate it and set to convertView
        } else {
            // setup separator view - inflate it and set to convertView
        }
    }

    // phase 2: see my explanation 
    if (type == 0) {
        // set the state of the common item view based on the position
        // rely on the fact that convertView contains the view hierarchy
        // you created in convertView == null && type == 0
    } else {
        // set state of the separator based on the position
        // rely on the fact that convertView contains the view hierarchy
        // you created in convertView == null && type != 0 (else part)
    }

    return convertView;}

問題的實際答案.。

我知道問題出在哪里,但我現(xiàn)在想不出一個優(yōu)雅的解決方案.

您的問題是將單擊偵聽器設(shè)置為viewHolder.checkbox.setOnCheckedChangeListener創(chuàng)建視圖時。因此,當(dāng)您滾動并且單擊行為應(yīng)用于錯誤的列表項時,它將被回收/重用。

盡量不要硬碼使用外部的位置final position..嘗試設(shè)置viewHolder.checkbox.setTag(position)以前return然后使用(Integer) buttonView.getTag()相反position+1..所以你的回收視圖將保持實際位置。

單擊復(fù)選框時,應(yīng)將狀態(tài)保存在其他地方。不要依賴UI狀態(tài)(因為它將被回收)。所以打電話viewHolder.checkbox.setChecked(persistedState)以前return.

我希望這是有意義的,你明白了.;-)


查看完整回答
反對 回復(fù) 2019-06-26
  • 3 回答
  • 0 關(guān)注
  • 445 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號