2016-09-28 7 views
0

こんにちは私はそれの最初の行だけを強調表示したいリストがありますが、問題は最初の行 (それは最後の最後の行です)(スクロール後に見えるようになります)も強調表示されている、と私はあまりにも速くスクロールするときに、第2の最後の行は次のようにリストビューは最初の行のみを強調表示

public class ValueItemsListArrayAdapter extends ArrayAdapter<ValueItem> { 

private final Activity context; 
private final ArrayList<ValueItem> mValueItem; 
int listHeight; 
ListView lv; 
boolean multiOwner; 
boolean containRisk; 

//private boolean fillScreen; 
public ValueItemsListArrayAdapter(Activity context, ArrayList<ValueItem> mValueItem, boolean multiOwner,boolean containRisk) { 
    super(context, R.layout.result_list_item, mValueItem); 
    this.context = context; 
    this.mValueItem = mValueItem; 
    lv = (ListView) context.findViewById(R.id.valueslist); 
    this.multiOwner = multiOwner; 
    this.containRisk = containRisk; 
    //listHeight=lv.getHeight(); 
    //this.fillScreen=fillScreen; 
} 
// static to save the reference to the outer class and to avoid access to 
// any members of the containing class 

private class ViewHolder { 
    public TextView titleTextView, valueTextView; 
    public View row; 
    public ImageView icon; 
    public LinearLayout llResult; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // ViewHolder will buffer the assess to the individual fields of the row layout 

    final ViewHolder holder; 
    // Recycle existing view if passed as parameter 
    // This will save memory and time on Android 
    // This only works if the base layout for all classes are the same 
    View rowView = convertView; 
    if (rowView == null) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     rowView = inflater.inflate(R.layout.result_list_item, null, true); 

     holder = new ViewHolder(); 

     holder.titleTextView = (TextView) rowView.findViewById(R.id.result_title); 
     holder.llResult = (LinearLayout) rowView.findViewById(R.id.llResult); 

     holder.valueTextView = (TextView) rowView.findViewById(R.id.result_value); 
     holder.row = rowView.findViewById(R.id.row); 
     holder.icon = (ImageView) rowView.findViewById(R.id.many_owner_icon); 
     ViewFont.setListRowTextResizing(rowView, context); 


     rowView.setTag(holder); 

    } else { 
     holder = (ViewHolder) rowView.getTag(); 
    } 

    //String s=mValueItem.get(position).getTitle(); 
    // int x=holder.titleTextView.getHeight(); 
    holder.titleTextView.setText(mValueItem.get(position).getTitle()); 
    if (multiOwner && mValueItem.get(position).getTitle().equals(Plate.getOwnerNameTitle())) { 
     //rowView.setBackgroundColor(Color.GREEN); 
     holder.titleTextView.setTextColor(Color.rgb(57, 113, 67)); 
     holder.valueTextView.setTextColor(Color.rgb(57, 113, 67)); 
     holder.icon.setVisibility(View.VISIBLE); 

     if (containRisk && position == 0) { 
      holder.llResult.setBackgroundColor(Color.RED); 
      holder.icon.setImageResource(R.drawable.car_risk); 
     } 


    } else { 
     holder.valueTextView.setTextColor(Color.BLACK); 
     holder.titleTextView.setTextColor(Color.BLACK); 
     holder.icon.setVisibility(View.GONE); 
     if (containRisk && position == 0) { 
      holder.llResult.setBackgroundColor(Color.RED); 
      holder.icon.setVisibility(View.VISIBLE); 
      holder.icon.setImageResource(R.drawable.car_risk); 
     } 
     Log.wtf("position",""+position); 
    } 

    holder.valueTextView.setText(mValueItem.get(position).getValue()); 
    //holder.valueTextView.setTextColor(mValueItem.get(position).getColor()); 
    if (mValueItem.get(position).getBackground() != 0) 
     holder.row.setBackgroundResource(mValueItem.get(position).getBackground()); 
    else 
     holder.row.setBackgroundResource(R.drawable.result_text); 

    Log.d("pos",""+position); 

    return rowView; 


} 


} 
+0

1つの行のみをハイライトしたいですか? – Jai

+0

yes(ポジション== 0) –

答えて

0

getViewメソッドの最初の行の位置だけを確認してください。

if (position != 0) 
     holder.row.setBackgroundColor(Color.WHITE); 
    else 
     holder.row.setBackgroundColor(Color.RED); 
+0

それは動作しませんでした。 –

+0

どこを変更しましたか?編集したコードを表示してください。 – GrIsHu

+0

正確に書かれた場所 –

0
if (position != 0) 
    holder.row.setBackgroundResource(mValueItem.get(position).getBackground()); 
else 
    holder.row.setBackgroundResource(R.drawable.result_text); 

は(コメントを参照してください)

if (rowView == null) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    rowView = inflater.inflate(R.layout.result_list_item, null, true); 

    holder = new ViewHolder(); 

    holder.titleTextView = (TextView) rowView.findViewById(R.id.result_title); 
    holder.llResult = (LinearLayout) rowView.findViewById(R.id.llResult); 

    holder.valueTextView = (TextView) rowView.findViewById(R.id.result_value); 
    holder.row = rowView.findViewById(R.id.row); 
    holder.icon = (ImageView) rowView.findViewById(R.id.many_owner_icon); 
    ViewFont.setListRowTextResizing(rowView, context); 

    //put above code here 

    rowView.setTag(holder); 
} 
コードの上に置く助けてください を強調し、ここに私のアダプタのget
+0

の場合は、次のようになります。if(rowView == null){ if(mValueItem.get(position).getBackground()!= 0) holder.row.setBackgroundResource (mValueItem.get(position).getBackground()); else holder.row.setBackgroundResource(R.drawable.result_text); rowView.setTag(holder); } –

+0

@eshteghelcompanyはいあなたの完全なコードと共に正しいです。 – Nikhil

+0

また、それを 'if(position!= 0)'に変更します。 –

0

これは、listviewのデフォルト動作のために起こっています。あなたが所有者を使用していたときには、常にviewが再利用されます。

if (multiOwner && mValueItem.get(position).getTitle().equals(Plate.getOwnerNameTitle())) { 
    //rowView.setBackgroundColor(Color.GREEN); 
    holder.titleTextView.setTextColor(Color.rgb(57, 113, 67)); 
    holder.valueTextView.setTextColor(Color.rgb(57, 113, 67)); 
    holder.icon.setVisibility(View.VISIBLE); 

    if (containRisk && position == 0) { 
     holder.llResult.setBackgroundColor(Color.RED); 
     holder.icon.setImageResource(R.drawable.car_risk); 
    }else{ 

     // Set the default color which you want or which you already set to your row add your else part here and your are done 

     holder.llResult.setBackgroundColor(Color.WHITE); 
    } 


} else { 
    holder.valueTextView.setTextColor(Color.BLACK); 
    holder.titleTextView.setTextColor(Color.BLACK); 
    holder.icon.setVisibility(View.GONE); 
    if (containRisk && position == 0) { 
     holder.llResult.setBackgroundColor(Color.RED); 
     holder.icon.setVisibility(View.VISIBLE); 
     holder.icon.setImageResource(R.drawable.car_risk); 
    }else{ 
     // Set the default color which you want or which you already set to your row add your else part here and your are done 

     holder.llResult.setBackgroundColor(Color.WHITE); 
    } 
    Log.wtf("position",""+position); 
} 
+0

実際には –

+0

@eshteghelcompany:背景を変更しているコードをハイライト表示 – Jai

+0

@eshteghelcompany:今はどうなっていますか? – Jai

関連する問題