当前位置: 首页 > 知识库问答 >
问题:

ListFragment错误

闾丘冠玉
2023-03-14

我有一个列表在一个“ListView”滚动列表使用这个混乱,分组和列表有一个标题与图标。

公共类MyCustomAdapter扩展了BaseAdapter{

private static final String ASSETS_DIR = "images/";
private static final int TYPE_HEAD = -1;
private static final int TYPE_ITEM = 0;
private static final int TYPE_SEPARATOR = 1;
private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;


private Context ctx;

private ArrayList<String> mData = new ArrayList<String>();
private LayoutInflater mInflater;

private TreeSet<Integer> mSeparatorsSet = new TreeSet<Integer>();

public MyCustomAdapter(Context context) {
    this.ctx = context;
    mInflater = (LayoutInflater) ctx
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public void addItem(final String item) {
    mData.add(item);
    notifyDataSetChanged();
}

public void addSeparatorItem(final String item) {
    mData.add(item);
    mSeparatorsSet.add(mData.size() - 1);
    notifyDataSetChanged();
}

public void addHeadItem(){
    mData.add("");
    mSeparatorsSet.add(0);
    notifyDataSetChanged();
}

@Override
public int getCount() {

    return mData.size();
    //return equipos.size();
}

@Override
public String getItem(int position) {

    return mData.get(position) ;
}

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

@Override
public int getItemViewType(int position) {
    if (position==0)
        return TYPE_HEAD;

    return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
}

@Override
public int getViewTypeCount() {
    return TYPE_MAX_COUNT;
}

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

    ViewHolder holder = null;
    int type = getItemViewType(position);
    System.out.println("getView " + position + " " + convertView
            + " type = " + type);
    if (convertView == null) {
        holder = new ViewHolder();
        switch (type) {
        case TYPE_ITEM:
            convertView = mInflater.inflate(R.layout.list_item, null);

            holder.textView1 = (TextView) convertView.findViewById(R.id.textView1);
            holder.textView2 = (TextView) convertView.findViewById(R.id.textView2);
            holder.textView3 = (TextView) convertView.findViewById(R.id.textView3);
            holder.imageView1 = (ImageView) convertView.findViewById(R.id.imageView1);

            String[] datos = mData.get(position).split("-");

            holder.textView1.setText(String.format(" %s - %s", datos[0],datos[1]));
            holder.textView2.setText(datos[2]);
            holder.textView3.setText(datos[3]);

            String sel_bandera =  datos[4].trim() ;

            String imgFilePath = "";

            if (sel_bandera.equals("verde")){
                 imgFilePath = ASSETS_DIR + "circle_green.png" ;
            }else if (sel_bandera.equals("amarilla")){
                 imgFilePath = ASSETS_DIR + "circle_yellow.png";
            }else {
                 imgFilePath = ASSETS_DIR + "circle_red.png";
            }
            try {
                Bitmap bitmap = BitmapFactory.decodeStream(this.ctx.getResources().getAssets().open(imgFilePath));
                holder.imageView1.setImageBitmap(bitmap);
                //bandera.setImageBitmap(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }


            break;
        case TYPE_SEPARATOR:
            convertView = mInflater.inflate(R.layout.list_group, null);
            holder.textView1 = (TextView) convertView.findViewById(R.id.textSeparator);
            holder.textView1.setText(mData.get(position));
            break;

        case TYPE_HEAD:
            convertView = mInflater.inflate(R.layout.list_head, null);

            break;
        }
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    return convertView;

}


public static class ViewHolder {

    public TextView textView1;
    public TextView textView2;
    public TextView textView3;
    public ImageView imageView1;

    public TextView getTextView1() {
        return textView1;
    }
    public void setTextView1(TextView textView1) {
        this.textView1 = textView1;
    }
    public TextView getTextView2() {
        return textView2;
    }
    public void setTextView2(TextView textView2) {
        this.textView2 = textView2;
    }
    public TextView getTextView3() {
        return textView3;
    }
    public void setTextView3(TextView textView3) {
        this.textView3 = textView3;
    }
    public ImageView getImageView1() {
        return imageView1;
    }
    public void setImageView1(ImageView imageView1) {
        this.imageView1 = imageView1;
    }

}

公共视图onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){mAdapter=new MyCustomAdapter(getActivity());

            if (lista.length > 0) {
                String[] datos = lista[0].split("-");
                cabecera_grupo = datos[4];
            }

            mAdapter.addHeadItem();

            for (int i = 0; i < lista.length; i++) {

                String[] datos = lista[i].split("-");
                String grupo = datos[4];


                if (i == 0) {
                    mAdapter.addSeparatorItem(grupo.replace("_", " "));

                }

                if (!grupo.equals(cabecera_grupo)) {

                    mAdapter.addSeparatorItem(grupo.replace("_", " "));
                    cabecera_grupo = grupo;
                }

                mAdapter.addItem(String.format("%s - %s - %s - %s - %s",
                        datos[0], datos[1], datos[2], datos[3], datos[5]));

            }

            setListAdapter(mAdapter);

返回super.onCreateView(inflater,container,savedInstanceState);}

共有1个答案

戚英逸
2023-03-14

我建议您重写getView()方法,因为我认为您错误地使用了ViewHolder模式。阅读以下内容:http://www.jmanzano.es/blog/?p=166,或者直接删除ViewHolder并在不使用它的情况下编写getView()。

 类似资料:
  • 问题内容: 我有一个包含项目类别的列表视图。当我在列表上按类别标题时,它将显示另一个包含所选类别内项目的列表视图。 我通过使用ListFragment来做到这一点。我是否必须启动一个新活动并按意图一起传递类别ID? 这是我的类别: 我要添加什么以转到“项目列表”?我需要使用另一个ListFragment还是仅使用常规ListActivity? 如何从解析的JSON中检索类别ID并将其传递给列表项?

  • 问题内容: 这是我的代码。我在ArraryAdapter上收到错误消息。 如何用数组填充? 这是我的XML: 问题答案: 片段不是上下文对象。您需要将Activity对象(Fragment.getActivity())作为第一个参数传递。

  • 问题内容: 我有一个列表片段(导入v4支持库,构建目标是2.3.3 api 11),并且在我的代码中以下问题在目标为3.0且我未使用该库时运行正常。 现在我得到了编译错误 它告诉我将“ Fragment”更改为ExampleFragment(例如) 然后我有一个问题ft.replace命令有一个错误: 它告诉我将第一行中的ExamplesFragment改回到Fragment,这样圆就转了转 问题

  • 问题内容: 我是Android开发的新手,正在使用JSON解析方法解析数据,使用List Fragment扩展了类,并且希望将数据显示在列表视图中,但是问题是除图像外,我获取的所有数据都非常完美,我没有不知道该怎么解决,我的回答是这样的 问题答案: 尝试使用自定义适配器的AndroidQuery: 如何将适配器设置为ListView:

  • 我正在尝试在图形布局编辑器中预览一个。由于它没有要预览的片段布局,我只是创建了一个内部带有的xml,以查看项目的外观,并使用其中一个默认项目布局设置预览列表内容,以供尝试。 问题是: 无论发生什么情况,预览中的列表都是空的 预览我选择的列表内容; (我不知道我做错了什么,现在它起作用了) 我想预览自己的自定义列表项视图,而不仅仅是一个布局,因为当为真时,我将只做几件事 任何想法? 编辑:这个片段是

  • 我正在尝试创建一个自定义ListView。当我测试我的代码时,我收到以下错误 在发布此问题之前,除了阅读有关 Fragments,ListFragments和ListViews的Android文档外,我还参考了以下链接。 链接1:fragmentation activity onCreateView < br >链接2:在Android上使用ListFragment的问题< br >链接3: An