Android ListView子布局中的重复元素

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

Vybreations arraylist中的所有图形都是唯一的,但getView正在重复列表中的元素。我正确地使用了convertView,但它仍然在列表中重复相同的图形。我不知道我做错了什么

以下是我得到的链接:

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;
}

}