0

私のAndroidアプリのユーザーでは、リストビューでアイテムを1つだけ選択すると、その特定のアイテムのテキストビューの色が変更されます。ユーザーがリストビューで他のアイテムを選択した場合、前のアイテムの色がデフォルトに設定されている場合、次の方法を使用して、ユーザーが選択したときにすべてのテキストビューの色をリセットしましたが、ランダムなテキストの色をスクロールすると変更されましたこの問題を解決する他の解決策がある場合

lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {

ただし、getchildcount メソッドは、現在表示されているアイテムのテキストビューのみを返します:-(

                for(int i=0;i<lv.getChildCount();i++)
                {
                    Log.i("text",((TextView)((LinearLayout)lv.getChildAt(i)).findViewById(R.id.TruckNumber)).getText()+"");
            ((TextView)((LinearLayout)lv.getChildAt(i)).findViewById(R.id.TruckNumber)).setTextColor(Color.LTGRAY);
                }
                ((TextView)((LinearLayout)arg1).findViewById(R.id.TruckNumber)).setTextColor(Color.parseColor("#2a9bc8"));
                changeHeader(0);
                ((LinearLayout)lv.getChildAt(0)).refreshDrawableState();
        }   
    });

カスタムアダプタ

public class Search_Truck_Number_adapter extends BaseAdapter {

private static ArrayList<ListitemDetail> itemDetailarraylist;
private Context context=null;
        LayoutInflater inflater;
        ArrayList<TextView> TextViewObjects=new ArrayList<TextView>();
public Search_Truck_Number_adapter(ArrayList<ListitemDetail> result,Context c) {
    itemDetailarraylist=result;
    inflater = LayoutInflater.from(c);
    context=c;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return itemDetailarraylist.size();
}

@Override
public Object getItem(int arg0) {
    return itemDetailarraylist.get(arg0);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if(convertView==null)
    {
        convertView = inflater.inflate(R.layout.search_act_cell,null);
        holder = new ViewHolder();
        holder.txt_itemName = (TextView)convertView.findViewById(R.id.TruckNumber);
        holder.position=position;
        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }
    TextViewObjects.add(holder.txt_itemName);
    holder.txt_itemName.setText(itemDetailarraylist.get(position).getName());
    return convertView;
}

static class ViewHolder{
    TextView txt_itemName;
    Integer position;
}

}

4

2 に答える 2

1
public class Search_Truck_Number_adapter extends BaseAdapter implements OnClickListener
{
    private Integer no=null;

    private static ArrayList<ListitemDetail> itemDetailarraylist;
    private Context context=null;
            LayoutInflater inflater;
    public Search_Truck_Number_adapter(ArrayList<ListitemDetail> result,Context c) {
        itemDetailarraylist=result;
        inflater = LayoutInflater.from(c);
        context=c;
    }   
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return itemDetailarraylist.size();
    }

    @Override
    public Object getItem(int arg0) {
        return itemDetailarraylist.get(arg0);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView==null)
        {
            convertView = inflater.inflate(R.layout.search_act_cell,null);
            holder = new ViewHolder();
            holder.txt_itemName = (TextView)convertView.findViewById(R.id.TruckNumber);
            holder.position=position;
            convertView.setOnClickListener(this);
            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.position=position;
        holder.txt_itemName.setText(itemDetailarraylist.get(position).getName());
        if(no!=null)
        {
        if(no!=position)
        {
            holder.txt_itemName.setTextColor(Color.LTGRAY);
        }
        else
        {
            holder.txt_itemName.setTextColor(Color.parseColor("#2a9bc8"));
        }
        }
        return convertView;
    }

     static class ViewHolder{
        TextView txt_itemName;
        Integer position;
        Integer Select_Position;
    }

    @Override
    public void onClick(View v) {
        SearchActivity sa=new SearchActivity();
        sa.changeHeader(0, context);
      ListView lv=(ListView) v.getParent();
      for(int i=0;i<lv.getChildCount();i++)
      {
         ((TextView)((LinearLayout)lv.getChildAt(i)).findViewById(R.id.TruckNumber)).setTextColor(Color.LTGRAY); 
      }
        no=((ViewHolder)v.getTag()).position;
        ((ViewHolder)v.getTag()).txt_itemName.setTextColor(Color.parseColor("#2a9bc8"));
        Log.i("Position", ((ViewHolder)v.getTag()).position+"");
    }
}
于 2013-07-04T05:40:20.100 に答える
0

getChildAt() は、画面に表示されているリスト内のビューに対してのみ機能するため、最初に lv.getFirstVisiblePostion() を呼び出すことができます (これは、ListView が間接的に拡張するクラス android.widget.AdapterView のメソッドです (android の ListView を参照)。開発者がガイドして継承ツリーを参照してください))。その後、画面上の位置に対するビューのインデックスがわかっている場合は、getFirstVisiblePosition() の結果にインデックスを追加できます (例: getFirstVisiblePosition() + index)。これにより、画面に表示されているものだけでなく、リスト全体に対するビューの位置がわかります。これを使用して、テキストの色を変更できます。 - お役に立てれば

于 2013-07-03T13:32:53.710 に答える