大家好我正在使用带有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>
答案 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;
}