0

ユーザーにステータスを示すために、フラグが設定されたアイテムのリストを受け取るリストビューを作成しようとしています。黄色の背景を使用して旗の表示を作成することができました (下の画像を参照)。理論的には、フラグ付きリストには多くのフラグ付きアイテムを含めることができます。ただし、私のアプリでは、フラグが設定された最初の 3 つの背景のみが表示されます。これは、最初は画面に引き寄せられているためだと思います。画面に最初に描画されないフラグ付きの背景は表示されません。残りのフラグをリストに表示する方法を知りたいです。

ListView のリサイクル: listView の背景は getView() でリサイクルされています。このリサイクルは、位置 0 から位置 9 まで行われます。位置 13、14 などで一致する必要があるフラグがあります。それらの位置は表示されていません。

listView.getCheckedItemPositions() 複数選択の場合: ユーザーがフラグを選択しないため、このメソッドは私の場合は機能しません。フラグはサーバーから来ています。

setNotifyOnChange() および/または public virtual void SetNotifyOnChange (bool notifyOnChange): リストに新しいデータを追加していないため、このメソッドがプログラムでどのように機能するかわかりません。このメソッドは、データのリサイクル時に getview と通信しますか? 私の研究では、これに対する答えを見つけることができませんでした。

public void registerDataSetObserver: これは私の問題ではやり過ぎかもしれませんが、ビューがリサイクルされているかどうかに関係なく、アイテム リストとフラグ リストのすべての位置を追跡するオブザーバー オブジェクトを持つことは可能ですか画面?

サーバーからのフラグ付き背景
(ソース: leobee.com )

コード:

package com.convention.notification.app;

import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class NewsRowAdapter extends ArrayAdapter<Item> {

    private Activity activity;
    private List<Item> items;
    private Item objBean;
    private int row;
    private List<Integer> disable;
    View view ;
    int disableView;

    public NewsRowAdapter(Activity act, int resource, List<Item> arrayList, List<Integer> disableList) {
        super(act, resource, arrayList);
        this.activity = act;
        this.row = resource;
        this.items = arrayList;
        this.disable=disableList;
        
        System.out.println("results of delete list a:"+disable.toString()); 
    
    }
    
    public int getCount() {
        return items.size();        
    }
    public Item getItem(int position) {
        return items.get(position);
    }
    public long getItemId(int position) {
        return position;
    }


        @Override
        public int getItemViewType(int position) {

        for(int k =0;k < disable.size();k++){
            if(position==disable.get(k)){
                
            //System.out.println( "is "+position+" value of disable "+disable.get(k));
                disableView=disable.get(k);
                
                //AdapterView.getItemAtPosition(position);
            } 
   
        }
              


    return position;
}
  
            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                View view = convertView;
                ViewHolder holder;

                if (view == null) {
                    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    view = inflater.inflate(row, null);

                    getItemViewType(position);
                    long id=getItemId(position);
                    
                    
                    if(position==disableView){ 
                        view.setBackgroundColor(Color.YELLOW);
                        System.out.println(" background set to yellow at position "+position +" disableView is at "+disableView);
                        
                        
                        }else{
                            view.setBackgroundColor(Color.WHITE);
                            System.out.println(" background set to white at position "+position +" disableView is at "+disableView);
                            
                            }
    
                    
                    //ViewHolder is a custom class that gets TextViews by name: tvName, tvCity, tvBDate, tvGender, tvAge;
                    holder = new ViewHolder();
                    
                    /* setTag Sets the tag associated with this view. A tag can be used to
                     *  mark a view in its hierarchy and does not have to be unique 
                     *  within the hierarchy. Tags can also be used to store data within
                     *   a view without resorting to another data structure.

        */
                    view.setTag(holder);
                } else {
                    
                    //the Object stored in this view as a tag
                    holder = (ViewHolder) view.getTag();
                }

                if ((items == null) || ((position + 1) > items.size()))
                    return view;

                objBean = items.get(position);


        holder.tv_event_name = (TextView) view.findViewById(R.id.tv_event_name);
        holder.tv_event_date = (TextView) view.findViewById(R.id.tv_event_date);
        holder.tv_event_start = (TextView) view.findViewById(R.id.tv_event_start);
        holder.tv_event_end = (TextView) view.findViewById(R.id.tv_event_end);
        holder.tv_event_location = (TextView) view.findViewById(R.id.tv_event_location);


        if (holder.tv_event_name != null && null != objBean.getName()
                && objBean.getName().trim().length() > 0) {
            holder.tv_event_name.setText(Html.fromHtml(objBean.getName()));
            
        }
        if (holder.tv_event_date != null && null != objBean.getDate()
                && objBean.getDate().trim().length() > 0) {
            holder.tv_event_date.setText(Html.fromHtml(objBean.getDate()));
        }
        if (holder.tv_event_start != null && null != objBean.getStartTime()
                && objBean.getStartTime().trim().length() > 0) {
            holder.tv_event_start.setText(Html.fromHtml(objBean.getStartTime()));
        }
        if (holder.tv_event_end != null && null != objBean.getEndTime()
                && objBean.getEndTime().trim().length() > 0) {
            holder.tv_event_end.setText(Html.fromHtml(objBean.getEndTime()));
        }
        if (holder.tv_event_location != null && null != objBean.getLocation ()
                && objBean.getLocation ().trim().length() > 0) {
            holder.tv_event_location.setText(Html.fromHtml(objBean.getLocation ()));
            
        }
    
        
        return view;
    }

    public class ViewHolder {
        public TextView 
        tv_event_name,
        tv_event_date,
        tv_event_start,
        tv_event_end,
        tv_event_location
        /*tv_event_delete_flag*/;
        
        
    }
    
     
}

ログキャット:

06-12 20:54:12.058: I/System.out(493): item disalbed is at postion :0
06-12 20:54:12.058: I/System.out(493): item disalbed is at postion :4
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :5
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :13
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :14
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :17
06-12 20:54:12.069: I/System.out(493): results of delete list :[0, 4, 5, 13, 14, 17]
06-12 20:54:12.069: I/System.out(493): results of delete list a:[0, 4, 5, 13, 14, 17]
06-12 20:54:12.069: I/System.out(493):  set adapaer to list view called;
06-12 20:54:12.128: I/System.out(493):  background set to yellow at position 0 disableView is at 0
06-12 20:54:12.628: I/System.out(493):  background set to white at position 1 disableView is at 0
06-12 20:54:12.678: I/System.out(493):  background set to white at position 2 disableView is at 0
06-12 20:54:12.708: I/System.out(493):  background set to white at position 3 disableView is at 0
06-12 20:54:12.738: I/System.out(493):  background set to yellow at position 4 disableView is at 4
06-12 20:54:12.778: I/System.out(493):  background set to yellow at position 5 disableView is at 5
06-12 20:54:12.808: I/System.out(493):  background set to white at position 6 disableView is at 5
06-12 20:54:12.838: I/System.out(493):  background set to white at position 7 disableView is at 5

   

これは、1日前の最初の質問へのリンクです。

カスタム アダプタの条件に基づいて特定の行の背景を変更する

私はあなたの助けに感謝します!

4

1 に答える 1

0

OK、答えは、else セクションの if(view==null) の外側でコードを繰り返さなければならなかったということでした。

if (view == null) {
                    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    view = inflater.inflate(row, null);

                    getItemViewType(position);
                    long id=getItemId(position);


                    if(position==disableView){ 
                        view.setBackgroundColor(Color.YELLOW);
                        System.out.println(" background set to yellow at position "+position +" disableView is at "+disableView);


                        }else{
                            view.setBackgroundColor(Color.WHITE);
                            System.out.println(" background set to white at position "+position +" disableView is at "+disableView);

                            }


                    //ViewHolder is a custom class that gets TextViews by name: tvName, tvCity, tvBDate, tvGender, tvAge;
                    holder = new ViewHolder();

                    /* setTag Sets the tag associated with this view. A tag can be used to
                     *  mark a view in its hierarchy and does not have to be unique 
                     *  within the hierarchy. Tags can also be used to store data within
                     *   a view without resorting to another data structure.

        */
                    view.setTag(holder);
                } else {

                    getItemViewType(position);
                    long id=getItemId(position);


                    if(position==disableView){ 
                        view.setBackgroundColor(Color.YELLOW);
                        System.out.println(" background set to yellow at position "+position +" disableView is at "+disableView);


                        }else{
                            view.setBackgroundColor(Color.WHITE);
                            System.out.println(" background set to white at position "+position +" disableView is at "+disableView);

                            }
于 2012-06-13T00:23:06.920 に答える