0

3 つのテキストビューとチェックボックスを持つリストビューを作成し、BaseAdapter に配置しました。それがしなければならないことは、アイテムが「未読」ステータスにある場合、そのテキストビューをBOLDにすることです。しかし、私は2つの問題に遭遇しました。

  1. 既読、未読に関係なく、一番上の項目は常にBOLDです。
  2. スクロールすると、スクロールによってリロードされたアイテムが太字になり始めます

調べてみましたが、いいところが見つかりませんでした。誰かがアイデアを持っているなら、私を助けてくれませんか? 以下は getView() です。


public View getView(final int position, View convertView, ViewGroup parent) {
            View view = convertView;
            ViewHolder viewHolder;

            if(convertView == null){ // check if convertView exists
                // get and inflate layout
                view = layoutInflater.inflate(R.layout.row, null);

                viewHolder = new ViewHolder();
                viewHolder.tv1 = (TextView)view.findViewById(R.id.list_callerIDname);
                viewHolder.tv2 = (TextView)view.findViewById(R.id.list_callerIDnumber);
                viewHolder.tv3 = (TextView)view.findViewById(R.id.list_messageSentTime);
                viewHolder.cb = (CheckBox)view.findViewById(R.id.checkBox1);

                // get each CheckBox into cb_array for future use
                this.cb_array[position] = (CheckBox)view.findViewById(R.id.checkBox1);

                // use it as a tag
                view.setTag(viewHolder);
            }
            else{
                viewHolder = (ViewHolder)view.getTag();
            }

            viewHolder.tv1.setText(this.callerIDnames[position]);
            viewHolder.tv2.setText(this.callerIDnumbers[position]);
            viewHolder.tv3.setText(this.messageSentTimes[position]);

            // if message is unread, then make texts bold
            if (messageRead_list[position] == false){
                viewHolder.tv1.setTypeface(viewHolder.tv1.getTypeface(), Typeface.BOLD);
                viewHolder.tv2.setTypeface(viewHolder.tv2.getTypeface(), Typeface.BOLD);
                viewHolder.tv3.setTypeface(viewHolder.tv3.getTypeface(), Typeface.BOLD);
            }

            return view;
        }
4

3 に答える 3

1

ListView がビューを再利用する場合、スクロールする前は太字であった可能性があり、現在は無地のはずです。メッセージを読むときに、書体を明示的に PLAIN に設定してみてください。

于 2011-06-06T23:50:57.223 に答える
0

getItemViewType(int position) を実装して、2 種類のビュー カウントを使用する必要があります。

このような:

public int getViewTypeCount () {
    return 2;
}

この:

public int getItemViewType (int position) {
    if (messageRead_list[position] == false) return 0;
    return 1;
}

次に、作成時に項目タイプをチェックして、適切な書体を設定します。

これはハックですが、コメントが解決策になるはずなので、タイプを通常またはデフォルトに設定しています。messageRead_list が正しいと確信していますか?

于 2011-06-07T03:19:24.570 に答える
0

nullを使用するsetTypeFace()代わりに渡す必要がありgetTypeFace()ます。

getTypeFace()が返されない場合null、スタイルは正しく設定されません。

// if message is unread, then make texts bold
if (messageRead_list[position] == false){
    viewHolder.tv1.setTypeface(null, Typeface.BOLD);
    viewHolder.tv2.setTypeface(null, Typeface.BOLD);
    viewHolder.tv3.setTypeface(null, Typeface.BOLD);
} else {
    viewHolder.tv1.setTypeface(null, Typeface.NORMAL);
    viewHolder.tv2.setTypeface(null, Typeface.NORMAL);
    viewHolder.tv3.setTypeface(null, Typeface.NORMAL);
}

または、これを直接使用することもできます。これは、 を渡すときに行われることですnull

setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));

setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
于 2011-06-07T04:52:44.097 に答える