Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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 与clear()有关的问题;ListViewAdWater中的语句放置_Android_Android Listview - Fatal编程技术网

Android 与clear()有关的问题;ListViewAdWater中的语句放置

Android 与clear()有关的问题;ListViewAdWater中的语句放置,android,android-listview,Android,Android Listview,因此,当使用操作中的下拉菜单在片段之间切换时,我在listview中显示重复项时遇到问题,我放置了一个clear();语句修复了该问题,但使其下面的convertView.setOnClickListener崩溃。如果我移除清除();语句,然后一切正常,但我在listview中得到了重复的项。我正在使用ActionBarSherlock,此代码取自 任何帮助都将非常有助于找出所有东西是如何协同工作的。如果您需要任何其他代码,请告诉我 public class ListViewAdapter ex

因此,当使用操作中的下拉菜单在片段之间切换时,我在listview中显示重复项时遇到问题,我放置了一个clear();语句修复了该问题,但使其下面的convertView.setOnClickListener崩溃。如果我移除清除();语句,然后一切正常,但我在listview中得到了重复的项。我正在使用ActionBarSherlock,此代码取自 任何帮助都将非常有助于找出所有东西是如何协同工作的。如果您需要任何其他代码,请告诉我

public class ListViewAdapter extends BaseAdapter
{
// Declare Variables
Context mContext;
LayoutInflater inflater;
private List<ErrorCode> errorcodelist = null;
private ArrayList<ErrorCode> arraylist;

public ListViewAdapter(Context context, List<ErrorCode> errorcodelist) 
{
    mContext = context;
    this.errorcodelist = errorcodelist;
    inflater = LayoutInflater.from(mContext);
    this.arraylist = new ArrayList<ErrorCode>();
    this.arraylist.addAll(errorcodelist);
}

public class ViewHolder 
{
    TextView errorName;
    TextView codeValue;
    TextView description;
    TextView solution;
}

@Override
public int getCount() 
{
    return errorcodelist.size();
}

@Override
public ErrorCode getItem(int position) 
{
    return errorcodelist.get(position);
}

@Override
public long getItemId(int position) 
{
    return position;
} 

public View getView(final int position, View convertView, ViewGroup parent) 
{
    final ViewHolder holder;
    if (convertView == null) 
    {
        holder = new ViewHolder();
        convertView = inflater.inflate(R.layout.listview_item, null);
        // Locate the TextViews in listview_item.xml
        holder.errorName = (TextView) convertView.findViewById(R.id.errorName);
        holder.codeValue = (TextView) convertView.findViewById(R.id.codeValue);
        holder.description = (TextView) convertView.findViewById(R.id.description);
        holder.solution = (TextView) convertView.findViewById(R.id.solution);
        convertView.setTag(holder);
    }
    else 
    {

        holder = (ViewHolder) convertView.getTag();
    }
    // Set the results into TextViews
    holder.errorName.setText(errorcodelist.get(position).getErrorName());
    holder.codeValue.setText(errorcodelist.get(position).getCodeValue());
    holder.description.setText(errorcodelist.get(position).getDescription());
    holder.solution.setText(errorcodelist.get(position).getSolution());
    errorcodelist.clear();

    // Listen for ListView Item Click
    convertView.setOnClickListener(new OnClickListener() 
    {
        public void onClick(View arg0) 
        {
            // Send single item click data to SingleItemView Class
            Intent intent = new Intent(mContext, SingleItemView.class);
            // Pass all data errorName
            intent.putExtra("errorName",(errorcodelist.get(position).getErrorName()));
            // Pass all data errorCode
            intent.putExtra("codeValue",(errorcodelist.get(position).getCodeValue()));
            // Pass all data description
            intent.putExtra("description",(errorcodelist.get(position).getDescription()));
            // Pass all data solution
            intent.putExtra("solution",(errorcodelist.get(position).getSolution()));
            // Start SingleItemView Class
            mContext.startActivity(intent);
        }

    });
    return convertView;
}

// Filter Class
public void filter(String charText) 
{
    charText = charText.toLowerCase(Locale.getDefault());
    errorcodelist.clear();
    if (charText.length() == 0) 
    {
        errorcodelist.addAll(arraylist);
    }
    else
    {
        for (ErrorCode ec : arraylist)
        {
            // Search filter code
            if (ec.getErrorName().toLowerCase(Locale.getDefault()).contains(charText))
            {
                errorcodelist.add(ec);
            }
            if (ec.getCodeValue().toLowerCase(Locale.getDefault()).contains(charText))
            {
                errorcodelist.add(ec);
            }
        }

    }       
    notifyDataSetChanged();
}

}

您不能在自己的适配器方法中更改适配器正在迭代的列表,因为您正在更改位置。最糟糕的是清除该列表。这就解释了新的错误。因此,删除getView方法中的clear()

重复的项可能来自您的筛选器,因为如果一个项与错误和代码匹配,它可以添加两次。改为:

         // Search filter code
        if (ec.getErrorName().toLowerCase(Locale.getDefault()).contains(charText))
        {
            errorcodelist.add(ec);
        }
        else if (ec.getCodeValue().toLowerCase(Locale.getDefault()).contains(charText))
        {
            errorcodelist.add(ec);
        }

如果清除列表,errorcodelist.get(position)将抛出异常listview项何时会被复制?当你点击或选择一个列表时?当我使用下拉菜单在片段之间切换时,我忘记写的道歉是当我得到副本时。每次切换时,它都会继续添加相同的listview项。我已经编辑了我的语句。显示yout片段的代码。也许问题就在那里。您是否尝试在fragment onResume方法中调用notifyDataSetChanged?抱歉,我的意思是在使用操作栏中的下拉菜单在片段之间切换时发生问题。这段代码是为我正在实现的搜索函数编写的,但它工作正常;在片段的onResume方法上。
         // Search filter code
        if (ec.getErrorName().toLowerCase(Locale.getDefault()).contains(charText))
        {
            errorcodelist.add(ec);
        }
        else if (ec.getCodeValue().toLowerCase(Locale.getDefault()).contains(charText))
        {
            errorcodelist.add(ec);
        }