Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义ListView项重复_Android_Listview - Fatal编程技术网

Android 自定义ListView项重复

Android 自定义ListView项重复,android,listview,Android,Listview,我正在尝试将动态textview添加到listview项目中。textview可以是1-2或更多,这取决于我已成功添加textview的数据,但问题是textview在滚动中重复 我每次都在循环中创建textview的新对象。我知道android试图重用现有视图的问题,但每次我都必须添加新视图 以下是我在自定义适配器中的代码: public class ViewHolder { TextView text1; LinearLayout linearLayout; Text

我正在尝试将动态textview添加到listview项目中。textview可以是1-2或更多,这取决于我已成功添加textview的数据,但问题是textview在滚动中重复

我每次都在循环中创建textview的新对象。我知道android试图重用现有视图的问题,但每次我都必须添加新视图

以下是我在自定义适配器中的代码:

public class ViewHolder {
    TextView text1;
    LinearLayout linearLayout;
    TextView t;
    TextView t1;
}
getView方法

public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.two_item_icon_text, null);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView.findViewById(R.id.text1);

        convertView.setTag(holder);
    } else {

        holder = (ViewHolder) convertView.getTag();

    }

    holder.linearLayout = (LinearLayout) convertView.findViewById(R.id.lin_lay_dynamic);
    holder.text1.setText("" + DATA1[position]);
    String tmp, dateparsed;
    dateparsed = DATA1[position].substring(0, DATA1[position].indexOf(":"));
    for (int x = 0; x < calendareventholder1.size(); x++) {

        objHolder = (CalendarEventHolder) calendareventholder1.get(x);

        if (objHolder.opendate.equals(displaydate[current])) {

            tmp = objHolder.dtstarttime.toString().substring(0, objHolder.dtstarttime.toString().indexOf(":"));

            if (Integer.parseInt(tmp) >= Integer.parseInt(dateparsed) && Integer.parseInt(tmp) < Integer.parseInt(dateparsed) + 1) {
                holder.t = new TextView(convertView.getContext());
                holder.t.setText(":-d ");
                holder.t.setOnClickListener(this);

                if (Common.isChildSessionAlerted(String.valueOf(objHolder.id), getApplicationContext(), object1)) {

                    holder.t.setText(holder.t.getText() + objHolder.dtstarttime + " " + objHolder.dtendtime + " :-a");
                } else {
                    holder.t.setText(holder.t.getText() + objHolder.dtstarttime + " " + objHolder.dtendtime);
                }
                holder.t.setTag(objHolder.id);
                holder.t.setTextSize(Common.getPreferenceInt(getApplicationContext(), Common.PREF_FONT_SIZE, 10));
                holder.t.setTextColor(Color.BLACK);
                holder.t.setText(getSmiledText(ScheduleActivity.this,
                holder.t.getText().toString()));
                holder.linearLayout.addView(holder.t);
                holder.t1 = new TextView(convertView.getContext());
                holder.t1.setOnClickListener(this);
                holder.t1.setText(objHolder.title);
                holder.t1.setTag(objHolder.id);

                holder.t1.setTextSize(Common.getPreferenceInt(getApplicationContext(), Common.PREF_FONT_SIZE, 10));
                holder.t1.setTextColor(Color.BLACK);
                holder.linearLayout.addView(holder.t1);
            }
        }
    }
    return convertView;
}
public View getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
convertView=mInflater.充气(R.layout.two\u item\u icon\u text,空);
holder=新的ViewHolder();
holder.text1=(TextView)convertView.findViewById(R.id.text1);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.linearLayout=(linearLayout)convertView.findViewById(R.id.lin\u lay\u dynamic);
holder.text1.setText(“+DATA1[位置]);
字符串tmp,dateparsed;
dateparsed=DATA1[position]。子字符串(0,DATA1[position]。indexOf(“:”);
对于(int x=0;x=Integer.parseInt(dateparsed)&&Integer.parseInt(tmp)
要真正理解holder中的内容有点困难,因为它不是超级描述性的,但是如果我正确地阅读了你的问题,那么你得到重复项目的原因是因为你只是添加了
视图
,而从未删除过之前的内容
ListView
回收视图,这意味着以前存在的内容将保留在那里。当它滚动时,它实际上一直在重用视图,而不是创建新的视图。我不会详细讨论,因为这里有一大堆类似的问题。但在高层,你应该这样做

getView() {
    /*previous stuff, and holder.linearLayout must have been set!*/
    if(holder.linearLayout.getChildCount() > 0)
        holder.linearLayout.removeAllViews();

这样,将删除已存在的任何视图。最后一件事,你也应该退房。非常有助于理解你为什么要做我发布的事情。

没问题。一件简单的事情是,您可能应该检查是否调用
removeallview
。当
线性布局中没有子对象时调用它没有意义。我会更新的,谢谢你,安迪,你救了我一天。