簡體   English   中英

實現 ViewHolder 模式的問題

[英]Problems implementing ViewHolder pattern

我正在從一本書上開發一個 android 應用程序。 我收到錯誤消息:“crimeHolder 無法解決”,我不明白為什么..

 public View getView(int poisition, View convertView , ViewGroup parent)
        {
            //If we weren't given a view, inflate one
            if (convertView == null)
            {
                convertView = getActivity().getLayoutInflater().inflate(R.layout.list_item_crime, null);
                ViewHolder crimeHolder = new ViewHolder();
                crimeHolder.titleTextView = (TextView)convertView.findViewById(R.id.listItemTitleTextView);
                crimeHolder.dateTextView = (TextView)convertView.findViewById(R.id.listItemDateTextView);
                crimeHolder.solvedCheckBox = (CheckBox)convertView.findViewById(R.id.crimeListItemSolvedCheckBox);

                // store the holder with the view
                convertView.setTag(crimeHolder);
            }

            //Configure the view for this Crime
            Crime crime = getItem(poisition);

            if (crime!=null)
            {

這 3 個顯示錯誤:

                crimeHolder.titleTextView.setText(crime.getTitle());
                crimeHolder.dateTextView.setText(crime.getDate().toString());   
                crimeHolder.solvedCheckBox.setChecked(crime.isSolved());
            }
            return convertView;

        }
    }

    static class ViewHolder
    {
        TextView titleTextView;
        TextView dateTextView;
        CheckBox solvedCheckBox;
    }

試試這樣...

public View getView(int poisition, View convertView , ViewGroup parent)
                {
    ViewHolder crimeHolder = null;
                    //If we weren't given a view, inflate one
                    if (convertView == null)
                    {
                        convertView = getActivity().getLayoutInflater().inflate(R.layout.list_item_crime, null);
                        crimeHolder = new ViewHolder();
                        crimeHolder.titleTextView = (TextView)convertView.findViewById(R.id.listItemTitleTextView);
                        crimeHolder.dateTextView = (TextView)convertView.findViewById(R.id.listItemDateTextView);
                        crimeHolder.solvedCheckBox = (CheckBox)convertView.findViewById(R.id.crimeListItemSolvedCheckBox);

                        // store the holder with the view
                        convertView.setTag(crimeHolder);
                    }else{
                        crimeHolder=(ViewHolder)convertView.getTag();
                    }

你在 if 塊中聲明了crimeHolder,所以在這個塊之外它不可用。 請嘗試以下代碼

public View getView(int poisition, View convertView , ViewGroup parent)
        {
            ViewHolder crimeHolder = null;
            //If we weren't given a view, inflate one
            if (convertView == null)
            {
                convertView = getActivity().getLayoutInflater().inflate(R.layout.list_item_crime, null);
                crimeHolder = new ViewHolder();
                crimeHolder.titleTextView = (TextView)convertView.findViewById(R.id.listItemTitleTextView);
                crimeHolder.dateTextView = (TextView)convertView.findViewById(R.id.listItemDateTextView);
                crimeHolder.solvedCheckBox = (CheckBox)convertView.findViewById(R.id.crimeListItemSolvedCheckBox);

                // store the holder with the view
                convertView.setTag(crimeHolder);
            }

            //Configure the view for this Crime
            Crime crime = getItem(poisition);

            if (crime!=null)
            { crimeHolder.titleTextView.setText(crime.getTitle());
            crimeHolder.dateTextView.setText(crime.getDate().toString());   
            crimeHolder.solvedCheckBox.setChecked(crime.isSolved());
        }
        return convertView;

    }
}

static class ViewHolder
{
    TextView titleTextView;
    TextView dateTextView;
    CheckBox solvedCheckBox;
}

暫無
暫無

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

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