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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在android中列表視圖很大時(shí)選擇列表項(xiàng)時(shí)出錯(cuò)?

在android中列表視圖很大時(shí)選擇列表項(xiàng)時(shí)出錯(cuò)?

素胚勾勒不出你 2021-08-04 16:51:33
目前我正在 Android 中制作一個(gè)應(yīng)用程序,它是一個(gè)待辦事項(xiàng)列表,它有一個(gè)編輯文本、按鈕和一個(gè)列表視圖,當(dāng)單擊按鈕時(shí),文本被添加到列表視圖,一切正常,但是當(dāng)我向列表視圖添加太多項(xiàng)目時(shí)嘗試選擇我的應(yīng)用程序停止工作的列表項(xiàng),我收到一條錯(cuò)誤消息,說 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference有人知道修復(fù)嗎?這是我的視圖數(shù)據(jù)方法,它在列表視圖中顯示項(xiàng)目public void viewdata(String tablename){    db = new mydbhandler(this);    lvitemslist = findViewById(R.id.lvitemlist);    ArrayList mylist = new ArrayList();    Cursor c = db.getdata(tablename);    while(c.moveToNext())    {        mylist.add(c.getString(1));    }    ListAdapter mylistadapter = new ArrayAdapter(this,R.layout.custom_item_row,R.id.ctv,mylist);    lvitemslist.setAdapter(mylistadapter);}這是 onitemclicklistenerlvitemslist.setOnItemClickListener(new AdapterView.OnItemClickListener() {        @Override        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {            View v = lvitemslist.getChildAt(i);            CheckedTextView ctv = v.findViewById(R.id.ctv);                ctv.setCheckMarkDrawable(android.R.drawable.checkbox_on_background);db.deletedata(tablename,ctv.getText().toString());視圖數(shù)據(jù)(表名);
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

看看你的這一行OnItemClickListener:


View v = lvitemslist.getChildAt(i);

我猜您想將ListView單擊的行分配給變量v。但是ViewGroup方法getChildAt(int)(ListView是一種ViewGroup)會(huì)給你


指定位置的視圖,如果該位置不存在于組中,則為 null

就像你說的,這適用于前幾個(gè)項(xiàng)目,但對于更高的位置,應(yīng)用程序崩潰。這是因?yàn)閟ListView有固定數(shù)量的 child View:大約與屏幕上同時(shí)顯示的數(shù)量一樣多,再加上一些以實(shí)現(xiàn)平滑滾動(dòng)。對于超出該固定數(shù)字的每個(gè)點(diǎn)擊行,lvitemslist.getChildAt(i)將返回null.


你能做些什么來修復(fù)你的代碼?


幸運(yùn)的是,您無需做太多工作即可獲得 clicked View,它作為 的參數(shù)之一傳遞給您onItemClick():第二個(gè)參數(shù)是被點(diǎn)擊的ListView行。


所以你只需要寫


lvitemslist.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override

    public void onItemClick(AdapterView<?> adapterView, View view, int position, long rowId) {

        CheckedTextView ctv = view.findViewById(R.id.ctv);

        ctv.setCheckMarkDrawable(android.R.drawable.checkbox_on_background);

        db.deletedata(tablename,ctv.getText().toString());

        viewdata(tablename);

    }

}

這將幫助您避免NullPointerException.


另一件事:您可以ListView通過調(diào)用從適配器外部更改行的外觀


ctv.setCheckMarkDrawable(android.R.drawable.checkbox_on_background);

這是危險(xiǎn)的(這個(gè)網(wǎng)站上有很多問題,結(jié)果人們在滾動(dòng)時(shí)會(huì)有奇怪的行為)。在您的情況下這可能不是問題,因?yàn)槟鶯istView很快就會(huì)刷新整體。但通常應(yīng)該為適配器提供決定每一行應(yīng)該是什么樣子的所有必要數(shù)據(jù)。然后可以更改數(shù)據(jù)列表,然后當(dāng)然調(diào)用notifyDatasetChanged()適配器。


查看完整回答
反對 回復(fù) 2021-08-04
  • 1 回答
  • 0 關(guān)注
  • 219 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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