TextView.setText() 的一個(gè)小坑

這是一個(gè) Adapter :

public class LiveGiftRankingListAdapter extends RecyclerView.Adapter<LiveGiftRankingListAdapter.RankingItemVH> {

    private Context mContext;
    private List<GiftRankingItemBean> mDataList;

    public LiveGiftRankingListAdapter(Context context, List<GiftRankingItemBean> dataList) {
        mContext = context;
        mDataList = dataList;
    }

    @Override
    public RankingItemVH onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_live_gift_ranking_list, parent, false);
        return new RankingItemVH(itemView);
    }

    @Override
    public void onBindViewHolder(RankingItemVH holder, int position) {
        DLog.e("onBindViewHolder", "===========onBindViewHolder==========");
        holder.bindViewData(position);
    }

    @Override
    public int getItemCount() {
        return mDataList.size();
    }

    class RankingItemVH extends RecyclerView.ViewHolder {
        TextView tv_no;
        TextView tv_user_name;
        TextView tv_gift_amount;


        public RankingItemVH(View view) {
            super(view);
            tv_no = (TextView) view.findViewById(R.id.tv_no);
            tv_user_name = (TextView) itemView.findViewById(R.id.tv_user_name);
            tv_gift_amount = (TextView) itemView.findViewById(R.id.tv_gift_amount);
        }

        public void bindViewData(int position) {
            GiftRankingItemBean bean = mDataList.get(position);
            tv_no.setText(position + 1);
            tv_user_name.setText("haha " + position);
            tv_gift_amount.setText(position * 10);
        }
    }
}

這是對應(yīng)的 Activity :

public class LiveGiftRankingListActivity extends BaseActivity {

    private RecyclerView mRecyclerView;
    private TitleBar mTitleBar;
    private List<GiftRankingItemBean> dataList;
    private LiveGiftRankingListAdapter mAdapter;

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.activity_live_gift_ranking_list);

        mTitleBar = new TitleBar(this);
        mTitleBar.setTitle("禮物排行榜");
        mRecyclerView = (RecyclerView) findViewById(R.id.rl_ranking_list);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,
                LinearLayoutManager.VERTICAL, false);
        mRecyclerView.setLayoutManager(linearLayoutManager);

        dataList = new ArrayList<>();
        mAdapter = new LiveGiftRankingListAdapter(this, dataList);
        mRecyclerView.setAdapter(mAdapter);
        test();
    }

    private void test() {
        for (int i = 0; i < 5; i++) {
            GiftRankingItemBean item = new GiftRankingItemBean();
            item.setNickname("haha " + i);
            item.setGiftValue(i * 10 + "");
            dataList.add(item);
        }
        mAdapter.notifyDataSetChanged();
        DLog.e("test", "dataList.size() = " + dataList.size());
        DLog.e("test", "getItemCount = " + mAdapter.getItemCount());
    }

}

奇怪的是列表總是沒數(shù)據(jù)顯示出來。

看 log 的輸出是這樣的: (我只打開了 error 級(jí)別的日志)

08-25 18:23:46.553 21328-21328/com.hoho.chatui E/test: getItemCount = 5
08-25 18:23:46.553 21328-21328/com.hoho.chatui E/test: dataList.size() = 5
08-25 18:23:46.553 21328-21328/com.hoho.chatui E/test: getItemCount = 5
08-25 18:23:46.620 21328-21328/com.hoho.chatui E/onBindViewHolder: ===========onBindViewHolder==========

發(fā)現(xiàn)AdapteronBindViewHolder只執(zhí)行了一次,而且tv_no椅野、tv_user_name乎完、 tv_gift_amount 都沒數(shù)據(jù)顯示出來矫夯。
然后用盡各種方法調(diào)試背稼,用控制變量法周循,不斷注釋,測試焚挠,注釋或杠,測試。
最后定位到問題代碼在這一句:
Adapter的 tv_no.setText(position + 1);

如果我把 postion + 1 改成其他字符串就沒問題宣蔚,比如 hello
額认境。胚委。才想起 TextView.setText() 有重載,系統(tǒng)把 position + 1 當(dāng)作資源 id 了叉信,然后根據(jù)這個(gè) id 去尋找資源亩冬,結(jié)果當(dāng)然是沒找到。
但是坑的是它不會(huì)拋出異常硼身,而且出問題以后它就不再往下執(zhí)行了硅急。。佳遂。
我打開 verbose 級(jí)別的日志發(fā)現(xiàn)是這樣的:

08-25 18:23:46.553 21328-21328/com.hoho.chatui E/test: getItemCount = 10
08-25 18:23:46.553 21328-21328/com.hoho.chatui E/test: dataList.size() = 10
08-25 18:23:46.553 21328-21328/com.hoho.chatui E/test: getItemCount = 10
08-25 18:23:46.566 21328-21649/com.hoho.chatui I/MobclickAgent: Extend current session: 5BE55D12218F991680664E3A6BA40551
08-25 18:23:46.620 21328-21328/com.hoho.chatui E/onBindViewHolder: ===========onBindViewHolder==========
08-25 18:23:46.620 21328-21328/com.hoho.chatui W/ResourceType: No package identifier when getting value for resource number 0x00000001
08-25 18:23:46.621 21328-21328/com.hoho.chatui I/AssetManager: AM res not found  getResourceText id = 1 caller = android.content.res.Resources.getText:337 android.widget.TextView.setText:4214 com.hoho.chatui.live.adapter.LiveGiftRankingListAdapter.onBindViewHolder:42 com.hoho.chatui.live.adapter.LiveGiftRankingListAdapter.onBindViewHolder:19 android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder:5471 android.support.v7.widget.RecyclerView$Adapter.bindViewHolder:5504

我通常只打開 error 級(jí)別的日志营袜,導(dǎo)致沒發(fā)現(xiàn)這個(gè)資源找不到的 info (系統(tǒng)竟然只把這種問題只當(dāng)作 info ,連 warming 都不是)丑罪。好吧荚板。。其實(shí)最大的問題是我自己寫代碼粗心大意吩屹,正確的寫法是 tv_no.setText( position + 1 + "") 跪另,我忘了再加一個(gè)雙引號(hào)。

為了以后少遇到這種問題:

  1. 其它類型轉(zhuǎn)換字符串都用這種方式: String.valueOf()煤搜,嚴(yán)謹(jǐn)一點(diǎn)免绿。
  2. 遇到 bug,排除問題的時(shí)候要打開全部日志擦盾,調(diào)到 verbose 級(jí)別嘲驾,細(xì)細(xì)查看。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厌衙,一起剝皮案震驚了整個(gè)濱河市距淫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婶希,老刑警劉巖榕暇,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡彤枢,警方通過查閱死者的電腦和手機(jī)狰晚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缴啡,“玉大人壁晒,你說我怎么就攤上這事∫嫡ぃ” “怎么了秒咐?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碘裕。 經(jīng)常有香客問我携取,道長,這世上最難降的妖魔是什么帮孔? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任雷滋,我火速辦了婚禮,結(jié)果婚禮上文兢,老公的妹妹穿的比我還像新娘晤斩。我一直安慰自己,他們只是感情好姆坚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布澳泵。 她就那樣靜靜地躺著,像睡著了一般兼呵。 火紅的嫁衣襯著肌膚如雪烹俗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天萍程,我揣著相機(jī)與錄音幢妄,去河邊找鬼。 笑死茫负,一個(gè)胖子當(dāng)著我的面吹牛蕉鸳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忍法,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼潮尝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饿序?” 一聲冷哼從身側(cè)響起勉失,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎原探,沒想到半個(gè)月后乱凿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顽素,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年徒蟆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胁出。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡段审,死狀恐怖全蝶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寺枉,我是刑警寧澤抑淫,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站姥闪,受9級(jí)特大地震影響丈冬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜甘畅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望往弓。 院中可真熱鬧疏唾,春花似錦、人聲如沸函似。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撇寞。三九已至顿天,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蔑担,已是汗流浹背牌废。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啤握,地道東北人鸟缕。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像排抬,于是被迫代替她去往敵國和親懂从。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,124評(píng)論 25 707
  • 2017年5月17日 Kylin_Wu 標(biāo)注(★☆)為考綱明確給出考點(diǎn)(必考) 常見手機(jī)系統(tǒng)(★☆) And...
    Azur_wxj閱讀 1,813評(píng)論 0 10
  • 日志文件對于一個(gè)服務(wù)器來說是非常重要的蹲蒲,它記錄著服務(wù)器的運(yùn)行信息番甩,許多操作都會(huì)寫日到日志文件,通過日志文件可以監(jiān)視...
    時(shí)待吾閱讀 1,018評(píng)論 0 5
  • 本人初學(xué)Android届搁,最近做了一個(gè)實(shí)現(xiàn)安卓簡單音樂播放功能的播放器缘薛,收獲不少窍育,于是便記錄下來自己的思路與知識(shí)總結(jié)...
    落日柳風(fēng)閱讀 19,133評(píng)論 2 41
  • 國內(nèi)多所一流高校特聘教授陳嘉映,日前受清華大學(xué)圖書館徐楠之邀掩宜,做了一場關(guān)于讀書的講座蔫骂。 講座題目:...
    方東流閱讀 339評(píng)論 0 2