Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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列表视图中的数据重复_Android_Listview_Adapter - Fatal编程技术网

android列表视图中的数据重复

android列表视图中的数据重复,android,listview,adapter,Android,Listview,Adapter,我有一个列表视图,其适配器位于不同包中的不同类中。现在我必须从数据库中获取数据,然后使用这些数据为列表视图设置适配器。因此,我创建了一个ArryList,并将其传递到Adapter的构造函数中,同时在列表视图中查看它。但问题是数据在重复。arraylist中有12个不同的字符串,但我得到的是-按顺序排列的前五个元素,然后重复相同的五个元素。数据计数始终正确,但位置始终为0,1,2,3,4。我不明白是什么问题。这是密码- public class CheckboxAdapter extends B

我有一个列表视图,其适配器位于不同包中的不同类中。现在我必须从数据库中获取数据,然后使用这些数据为列表视图设置适配器。因此,我创建了一个ArryList,并将其传递到Adapter的构造函数中,同时在列表视图中查看它。但问题是数据在重复。arraylist中有12个不同的字符串,但我得到的是-按顺序排列的前五个元素,然后重复相同的五个元素。数据计数始终正确,但位置始终为0,1,2,3,4。我不明白是什么问题。这是密码-

public class CheckboxAdapter extends BaseAdapter{

    LayoutInflater inflater ;
    ArrayList<String> mData = new ArrayList<String>();

    //constructor for lesion adapter
    public CheckboxAdapter (Context context, ArrayList<String> data){
        inflater = LayoutInflater.from(context);
        mData = data;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null){
            Log.v("pos", ""+position);
            convertView = inflater.inflate(R.layout.e_lesion_liststyle, null);          
            final CheckBox cb = (CheckBox) convertView.findViewById(R.id.disease_lesion_checkbox);
            cb.setText(mData.get(position));
            cb.setOnClickListener(new OnClickListener() {           
                @Override
                public void onClick(final View v) {
                    cb.setButtonDrawable(R.drawable.check_box_1);
                }
            });
        }//end of if condition
        return convertView;
    }
公共类CheckboxAdapter扩展了BaseAdapter{
充气机;
ArrayList mData=新的ArrayList();
//病变转接器构造器
公共CheckboxAdapter(上下文、ArrayList数据){
充气器=充气器。从(上下文);
mData=数据;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回mData.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
对数v(“位置”,“位置+”);
convertView=充气机。充气(R.layout.e\u Disease\u liststyle,空);
最终复选框cb=(复选框)convertView.findViewById(R.id.disease\u disease\u CheckBox);
cb.setText(mData.get(position));
cb.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(最终视图v){
cb.立根拔出(R.拔出。复选框1);
}
});
}//中频结束条件
返回视图;
}

试试这个。只需写出除充气代码以外的所有代码即可

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null){
            Log.v("pos", ""+position);
            convertView = inflater.inflate(R.layout.e_lesion_liststyle, null);   
           }       //end of if condition
            final CheckBox cb = (CheckBox) convertView.findViewById(R.id.disease_lesion_checkbox);
            cb.setText(mData.get(position));
            cb.setOnClickListener(new OnClickListener() {           
                @Override
                public void onClick(final View v) {
                    cb.setButtonDrawable(R.drawable.check_box_1);
                }
            });

        return convertView;
    }

Ankit您还可以为从db获取数据并创建mData arraylist.hi rahul的类粘贴代码!事实上,我已经检查了该部分。没关系。我从db获取正确的数据,并且当我在构造函数中传递arraylist时,它确实保存了有效的数据。仅当我在cb.settext行上将数据设置为我的列表视图时(mData.get(位置));出现此问题是因为位置索引始终相同,即0,1,2,3,4ok,一次屏幕上可以看到多少行。是否为5-6?问题已解决。此问题仅与Vinet正确说明的convertView有关。我正在检查convertView!=null的条件,并在其中设置数据本身,这是不正确的。我们应使用视图保持器在这些if-else条件pref之外设置数据部分。@rahul:是,一次只有5行在视图上可见screen@CapDroid我对android中的视图数据绑定非常陌生,我来自于C#的.net repeater风格。你能告诉我关于R.layout.e#u liststyle的情况吗?我猜这是一个通用的布局that用于在上重复给定的字符串数据?高级谢谢。例如,我有一个LocationHistory类型的数组列表,一个主要包含字符串的对象,我希望在布局的某种视图中显示每一行。除了更改适配器类中的数据类型外,我还必须创建一个扩展到上的通用布局吗包含位置历史数据的主布局?