Android的ListView项目重叠向上滚动

问题描述:

嗨,大家好我我使用的ListView与LayoutInflater当我滚动列表视图向下其确定但当我向上滚动它的起点重叠。Android的ListView项目重叠向上滚动

实际上,一旦第一行出现屏幕出现问题发生。

下面是Java代码的

public class VehicleActivity extends Activity 
{ 
static ListView listView; 
public int context_menu_index; 
public void onCreate(Bundle savedInstanceState) 
{ 
    //Some Code 
    listView = (ListView) findViewById(R.id.list_view); 
    listView.setAdapter(new EfficientAdapter(this)); 
} 

private class EfficientAdapter extends BaseAdapter 
{ 
    private LayoutInflater mInflater; 
    private TextView text1, text2, text3; 
    private View listItem; 
    private ImageView img_option; 

    //Some Code 
    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     if (convertView == null) 
     { 
     mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     listItem = mInflater.inflate(R.layout.three_col_row, null); 


     text1 = (TextView) listItem.findViewById(R.id.imei); 
     text2 = (TextView) listItem.findViewById(R.id.status); 
     text3 = (TextView) listItem.findViewById(R.id.location); 
     img_option = (ImageView) listItem.findViewById(R.id.img_arrow); 

     img_option.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
      VehicleActivity.this.registerForContextMenu(listView);           VehicleActivity.this.openContextMenu(listView); 

       context_menu_index = position; 
      } 
     }) 
     img_option.setFocusable(true); 
     img_option.setClickable(true); 
     img_option.setTag(getItem(position)); 

     //Setting The Font Style 
     text1.setTypeface(null, Typeface.BOLD); 
     text2.setTypeface(null, Typeface.ITALIC); 

     //Passing The Actual Values To TextViews 
     text1.setText("ID: "  +VehicleList.IMEI[position]); 
     text2.setText("Status: " +VehicleList.Status[position]); 
     text3.setText("Location: " +VehicleList.Location[position]); 

     listItem.setBackgroundColor(position % 2 == 0 ? Color.parseColor("#eaeaea") : Color.parseColor("#d3e3f3")); 
     } 

    return listItem; 
} 

} }

下面是活动布局具有的ListView

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:showAsAction="always" 
    android:background="#0066FF" > 

    <ListView 
     android:id="@+id/list_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:focusableInTouchMode="false" 
     android:cacheColorHint="#00000000" 
     android:dividerHeight="1dp" 
     android:scrollbars="none"> 
    </ListView> 

</LinearLayout> 

这里是布局我传递来的ListView

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout_main" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:orientation="horizontal" 
    android:padding="4dp"> 

    <LinearLayout 
    android:id="@+id/child_lay1"  
    android:layout_height="wrap_content" 
    android:layout_width="320dp" 
    android:orientation="vertical" 
    android:gravity="start"> 

      <TextView 
      android:id="@+id/imei" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:layout_marginLeft="10dp" 
      android:textSize="15sp" 
      android:textStyle="bold" 
      android:textColor="#000000"/> 

      <TextView 
      android:id="@+id/status" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:layout_marginLeft="10dp" 
      android:textSize="15sp" 
      android:textStyle="bold" 
      android:textColor="#000000"/> 

      <TextView 
      android:id="@+id/location" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:layout_marginLeft="10dp" 
      android:textSize="15sp" 
      android:textColor="#000000"/> 

    </LinearLayout> <!-- Child Vertical Linear Layout --> 

    <LinearLayout 
    android:id="@+id/child_lay2"  
    android:layout_height="30dp" 
    android:layout_width="30dp" 
    android:orientation="vertical" 
    android:gravity="end"> 

     <ImageView 
     android:id="@+id/img_arrow" 
     android:src="@drawable/arrow" 
     android:layout_width="30dp" 
     android:layout_height="30dp"/> 

    </LinearLayout> 

</LinearLayout> 
+0

请上传您的Java源代码...... – 2014-10-08 14:39:10

+0

请检查代码@Rajatsharma – 2014-10-08 15:18:20

您可以尝试在EfficientAdapter加入ViewHolder类,并改变你这样的代码: -

public class ViewHolder 
    { 
     TextView text1; 
     TextView text2; 
     TextView text3; 
     ImageView img_option; 
    } 

public View getView(final int position, View convertView, ViewGroup parent) 
    { ViewHolder holder; 
     if (convertView == null) 
     { 
     mInflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = mInflater.inflate(R.layout.three_col_row, null); 

     holder = new ViewHolder(); 

     holder.text1 = (TextView) convertView.findViewById(R.id.imei); 
     holder.text2 = (TextView) convertView.findViewById(R.id.status); 
     holder.text3 = (TextView) convertView.findViewById(R.id.location); 
     holder.img_option = (ImageView) convertView.findViewById(R.id.img_arrow); 
     convertView.setTag(holder); 
     holder.img_option.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
      VehicleActivity.this.registerForContextMenu(listView);           
      VehicleActivity.this.openContextMenu(listView); 

      int context_menu_index = position; 
      } 
     }); 

     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.img_option.setFocusable(true); 
     holder.img_option.setClickable(true); 
    holder.img_option.setTag(holder); 

     //Setting The Font Style 
     holder.text1.setTypeface(null, Typeface.BOLD); 
     holder.text2.setTypeface(null, Typeface.ITALIC); 

     //Passing The Actual Values To TextViews 
     holder. text1.setText("ID: "  +VehicleList.IMEI[position]); 
     holder.text2.setText("Status: " +VehicleList.Status[position]); 
     holder.text3.setText("Location: " +VehicleList.Location[position]); 

     convertView.setBackgroundColor(position % 2 == 0 ? Color.parseColor("#eaeaea") : Color.parseColor("#d3e3f3")); 

    return convertView; 
} 
+0

非常感谢很多人与任何问题合作。现在问题是什么错了?再次感谢,我试图解决这个问题最近15个小时。 – 2014-10-08 16:45:54

我认为你的适配器是不正确的,请检查建议的适配器。尝试使用ViewHolder,这样可以重用视图。

public View getView(final int position, View convertView, ViewGroup parent) 
    { 
ViewHolder vh; 
if (convertView == null) { 
      //inflate your view here. 
      convertView.setTag(vh); 
     } else { 
      vh = (ViewHolder) convertView.getTag(); 
     } 

     return convertView; 
} 
+0

让我试一下,但上次我使用ViewHolder时比我面临的是NullPointerException on img_option.setOnClickListener(new OnClickListener(){}); @ user3820076 – 2014-10-08 16:06:58