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

使用ListView和自定义适配器设置数据

寇夜洛
2023-03-14

我有一个ListView和一个自定义适配器。问题是我看不到listview和数据,只看到一个白色页面。

在片段中我有:

     private ArrayList<HashMap<String, Object>> mlist = new ArrayList<HashMap<String, Object>>();

    ...

for (int i = 1; i < array.length(); i++) {
                    HashMap<String, Object> map = new HashMap<String, Object>();

                    Gson gson = new Gson();


                    Avv mAvv = gson.fromJson(String.valueOf(array.getJSONObject(i)), Avv.class);

                    map.put("id", String.valueOf(i));
                    map.put("Name", mAvv.getNome());
                    map.put("Surname", mAvv.getCognome());
                    map.put("Title", mAvv.getTitolo());
                    map.put("Info",  mAvv.getTesto());


                    mlist.add(map);
                }

...


     CustomAdapter mAdapter = new CustomAdapter(getActivity(),mlist);
     list.setAdapter(mAdapter);

在CustomAdapter中,我有:

    public class CustomAdapter extends BaseAdapter {


        private final Activity context;
        private LayoutInflater mInflater;
        ArrayList<HashMap<String, Object>> mlist;

        public CustomAdapter(Activity context,ArrayList<HashMap<String, Object>> mlist){

            this.context = context;
            this.mlist=mlist;
            mInflater = context.getLayoutInflater();

        }
        public class ViewHolder {

            public ImageButton mImageButton;
            public TextView mTitleView;
            public TextView mNomeView;
            public TextView mCognomeView;
            public TextView mInfoView;

        }


        @Override
        public int getCount() {
            return 0;
        }

        @Override
        public Object getItem(int position) {

            if (mlist != null && position >= 0 && position < getCount()) {
                return mlist.get(position);
            }
            return null;
        }

        @Override
        public long getItemId(int position) {

            return position;
        }

        @Override
        public void notifyDataSetChanged() {
            super.notifyDataSetChanged();
        }

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

            View view = convertView;
            ViewHolder viewHolder;

            if (view == null) {

                view = mInflater.inflate(R.layout.item_list_avvisi, null);
                viewHolder = new ViewHolder();

                viewHolder.mImageButton = (ImageButton) view.findViewById(R.id.imageButton);
                viewHolder.mCognomeView = (TextView) view.findViewById(R.id.surname);
                viewHolder.mNomeView = (TextView) view.findViewById(R.id.name);
                viewHolder.mTitleView = (TextView) view.findViewById(R.id.title);
                viewHolder.mInfoView = (TextView) view.findViewById(R.id.info);


                view.setTag(viewHolder);

            }
            else {
                viewHolder = (ViewHolder) view.getTag();
            }

            setData(viewHolder, mlist, position);

            return view;
        }

        private void setData(ViewHolder viewHolder, ArrayList<HashMap<String, Object>> mlist,int position) {


            viewHolder.mCognomeView.setText(mlist.get(position).get("Surname").toString());
    viewHolder.mNomeView.setText(mlist.get(position).get("Name").toString());
            viewHolder.mTitleView.setText(mlist.get(position).get("Title").toString());
            viewHolder.mInfoView.setText(mlist.get(position).get("Info").toString());


        }
    }

我错在哪里?

更新:

谢谢,如果我想在ImageButton上设置onClickListener,我该怎么做?。。我尝试:

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

...
    viewHolder.mImageButton.setClickable(true);
                viewHolder.mImageButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {


                        Intent shareIntent = new Intent();
                        shareIntent.setAction(Intent.ACTION_SEND);

                        shareIntent.putExtra(Intent.EXTRA_TEXT, (String)  viewHolder.mNomeView.getText().toString()
                                );
                        shareIntent.setType("text/plain");
                        context.startActivity(shareIntent);


                    }
                });

但问题是,当我单击例如第一个项目viewHolder时。mNomeView。getText()。toString()返回第二项的字符串。。为什么?

共有1个答案

冯曾笑
2023-03-14

问题出在您的方法中

 @Override
    public int getCount() {
        return 0;
    }

将其更改为:

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

更新

第二个问题:
试试这个:

viewHolder.mImageButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    Intent shareIntent = new Intent();
                    shareIntent.setAction(Intent.ACTION_SEND);

                    shareIntent.putExtra(Intent.EXTRA_TEXT, (String) mlist.get(position).get("Name").toString()
                            );
                    shareIntent.setType("text/plain");
                    context.startActivity(shareIntent);


                }
            });
 类似资料:
  • 问题内容: 这是我遵循的使用自定义Listview适配器的教程。我遇到的问题是,当我尝试清除适配器时,应用程序崩溃并抛出 更新的代码: 问题答案: 环顾四周,似乎是使用数组初始化适配器。请参阅带有ArrayAdapter.remove的UnsupportedOperationException和无法在ListView中修改ArrayAdapter:UnsupportedOperationExcep

  • 我尝试按照幻灯片youtube 6部分教程创建一个带有自定义行的列表视图。在他的教程中,他使用了1个图像和2个文本视图,我需要3个图像和3个文本视图,当我运行应用程序时,它在尝试加载列表视图时崩溃。 -------------家庭单行.xml----------------------- - Homelistview.xml - Homeactivitylistview.java 04-22 15

  • 问题内容: 我看了以下网站: ListView示例 其中描述了如何在使用默认适配器的列表视图中实现搜索功能,并且效果很好。 如何修改它,以便可以将其用于列表视图的自定义适配器? 部分代码为: 问题答案: 您需要覆盖适配器内部的getFilter并返回您创建的新的customFilter对象。看到这个答案: 编辑:

  • 代码如下: 这是适配器,我在这里为列表做了自己的设计(< code>R.layout.zalistu),它在仿真器中工作,但在设备上它给我一个错误(应用程序意外停止),如果我使用< code>simple_list_item_1,那么它在仿真器和我的设备上都可以正常工作。 这里是R:layout.zalistu: 日志猫: 我设备上的Android版本是2.3.7,模拟器上的版本是4.0.4(AP

  • 我正在尝试将ListView与fragmnet中的自定义适配器(baseAdapter)一起使用。 当我直接在MainActivity中使用此代码时,一切正常,但当我在片段中使用此代码时,它没有崩溃,但它没有显示任何内容,它只是一个空白片段。另外,当我尝试使用简单的arrayAdapter在片段中绑定一个textView时,它工作得很好,所以我认为问题将出现在我的自定义适配器中。 为什么不显示Li

  • 问题内容: 我有一个使用自定义适配器的ListView,如下所示: 布局非常简单,因此除非有人认为它们相关,否则我不会发布它们。 问题是某些CheckBoxes没有响应。似乎是第一次显示布局时可见的内容。您必须向下滚动才能正常工作的任何内容。 任何指针表示赞赏。 问题答案: 答案中的代码有效,但效率很低(实际上,您可以看到它,只需滚动并检查即可看到垃圾收集器正在工作)。下面是一种改进的回收视图的方