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>
您可以尝试在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;
}
非常感谢很多人与任何问题合作。现在问题是什么错了?再次感谢,我试图解决这个问题最近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;
}
让我试一下,但上次我使用ViewHolder时比我面临的是NullPointerException on img_option.setOnClickListener(new OnClickListener(){}); @ user3820076 – 2014-10-08 16:06:58
请上传您的Java源代码...... – 2014-10-08 14:39:10
请检查代码@Rajatsharma – 2014-10-08 15:18:20