滚动向上的Android ListView项重叠

时间:2014-10-08 14:03:33

标签: android xml eclipse

大家好我正在使用带有LayoutInflater的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>  

2 个答案:

答案 0 :(得分:1)

尝试在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;
 }

答案 1 :(得分:0)

我认为您的适配器不对,请查看建议的适配器。尝试使用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;
}