Android ListView子布局中的重复元素
Vybreations arraylist中的所有图形都是唯一的,但getView正在重复列表中的元素。我正确地使用了convertView,但它仍然在列表中重复相同的图形。我不知道我做错了什么 以下是我得到的链接:Android ListView子布局中的重复元素,android,listview,layout-inflater,repeat,Android,Listview,Layout Inflater,Repeat,Vybreations arraylist中的所有图形都是唯一的,但getView正在重复列表中的元素。我正确地使用了convertView,但它仍然在列表中重复相同的图形。我不知道我做错了什么 以下是我得到的链接: public类adaptervybridations扩展了BaseAdapter { 私人语境; 公共阵列列表; 公共适配器配置(活动上下文,ArrayList ArrayBybitions) { this.context=上下文; this.vybrations=arrayVyb
public类adaptervybridations扩展了BaseAdapter
{
私人语境;
公共阵列列表;
公共适配器配置(活动上下文,ArrayList ArrayBybitions)
{
this.context=上下文;
this.vybrations=arrayVybrations;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图v=转换视图;
最终Vybration vybe=vybrations.get(位置);
如果(v==null)
{
LayoutInflater vi=(LayoutInflater)this.context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
v=vi.充气(R.布局.充气项,空);
}
LinearLayout布局=(LinearLayout)v.findViewById(R.id.layoutVybration);
ImageView播放=(ImageView)v.findViewById(R.id.imageViewPlay);
最终ListView lv=(ListView)父级;
//初始化图形
XYmultiplesseriesdataset数据集=新的XYmultiplesseriesdataset();
XYMultipleReseriesRenderer渲染器=新的XYMultipleReseriesRenderer();
renderer.setDisplayValue(false);
renderer.setZoomButtonsVisible(false);
渲染器.setShowGrid(false);
渲染器。设置显示轴(false);
渲染器.setShowLabels(false);
渲染器.setShowLegend(false);
renderer.setPanEnabled(false);
renderer.setZoomeEnabled(false);
渲染器。设置抗锯齿(true);
setMargins(新的int[]{10,10,10,10});
renderer.setPanEnabled(false,false);
setYAxisMax(15);
setXAxisMax(100);
XYSeriesRenderer renderSeries=新的XYSeriesRenderer();
renderSeries.setColor(Color.GREEN);
RenderSeries.setFillPoints(真);
渲染器系列。设置线宽(2);
renderer.addSeriesRenderer(renderSeries);
//将数据系列添加到图形中
addSeries(vybe.getGraphSeries());
GraphicalView graphView=ChartFactory.getTimeChartView(上下文、数据集、渲染器,“测试”);
//将图形添加到线性布局
布局。添加视图(graphView);
layout.setOnTouchListener(新的OnTouchListener()
{
@凌驾
公共布尔onTouch(视图v,运动事件)
{
Log.v(“触摸”、“触摸布局视图”);
返回true;
}
});
play.setOnClickListener(新的OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
vybe.play(假);
Log.v(“series”,vyborders.get(position.getGraphsEriessString());
Log.v(“单击位置”,位置+”);
}
});
if(lv.getChoiceMode()!=ListView.CHOICE\u MODE\u NONE)
{
SparseBooleanArray checked=lv.getCheckedItemPositions();
如果(选中。获取(位置))
v、 setBackgroundColor(context.getResources().getColor(android.R.color.holo_blue_light));
其他的
v、 setBackgroundColor(context.getResources().getColor(android.R.color.transparent));
}
返回v;
}
@凌驾
public int getCount()
{
返回此.vybrations.size();
}
@凌驾
公共对象getItem(int位置)
{
返回此.vybrations.get(位置);
}
@凌驾
公共长getItemId(int位置)
{
返回位置;
}
}
已解决:
我确实尝试过ViewHolder设计,但没有删除旧视图<代码>holder.linearLayout.removeAllViews()成功了。现在工作得很好。@Bam:arraylist中有多少元素?总共15个元素。他们从10号开始重复。看一看。前9个看起来很好,之后它们开始重复。您尝试使用基本适配器了吗?是的,我正在实现基本适配器。我已经编辑了代码并添加了整个类供您查看。已解决:
public class AdapterVybrations extends BaseAdapter
{
private Context context;
public ArrayList<Vybration> vybrations;
public AdapterVybrations(Activity context, ArrayList<Vybration> arrayVybrations)
{
this.context = context;
this.vybrations = arrayVybrations;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View v = convertView;
final Vybration vybe = vybrations.get(position);
if (v == null)
{
LayoutInflater vi = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.vybrations_item, null);
}
LinearLayout layout = (LinearLayout) v.findViewById(R.id.layoutVybration);
ImageView play = (ImageView) v.findViewById(R.id.imageViewPlay);
final ListView lv = (ListView) parent;
//initialize graph
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setDisplayValues(false);
renderer.setZoomButtonsVisible(false);
renderer.setShowGrid(false);
renderer.setShowAxes(false);
renderer.setShowLabels(false);
renderer.setShowLegend(false);
renderer.setPanEnabled(false);
renderer.setZoomEnabled(false);
renderer.setAntialiasing(true);
renderer.setMargins(new int[] { 10, 10, 10, 10 });
renderer.setPanEnabled(false, false);
renderer.setYAxisMax(15);
renderer.setXAxisMax(100);
XYSeriesRenderer rendererSeries = new XYSeriesRenderer();
rendererSeries.setColor(Color.GREEN);
rendererSeries.setFillPoints(true);
rendererSeries.setLineWidth(2);
renderer.addSeriesRenderer(rendererSeries);
//add data series to graph
dataset.addSeries(vybe.getGraphSeries());
GraphicalView graphView = ChartFactory.getTimeChartView(context, dataset, renderer, "Test");
//add graph to linear layout
layout.addView(graphView);
layout.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
Log.v("touched", "layout view touched");
return true;
}
});
play.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
vybe.play(false);
Log.v("series", vybrations.get(position).getGraphSeriesString());
Log.v("clickposition", position + "");
}
});
if (lv.getChoiceMode() != ListView.CHOICE_MODE_NONE)
{
SparseBooleanArray checked = lv.getCheckedItemPositions();
if (checked.get(position))
v.setBackgroundColor(context.getResources().getColor(android.R.color.holo_blue_light));
else
v.setBackgroundColor(context.getResources().getColor(android.R.color.transparent));
}
return v;
}
@Override
public int getCount()
{
return this.vybrations.size();
}
@Override
public Object getItem(int position)
{
return this.vybrations.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
}