ListView /自定义数组适配器-调用getView时适配器设置为null

用户名

我在弄清楚这个阵列适配器的东西时遇到了很多麻烦。

我将其与一些教程和本页面的帮助放在一起,当在项目列表视图中单击按钮时如何从android的列表视图添加/删除项目

但是我遇到一个问题,即在运行getView时,“适配器”设置为“空”。我不知道这是怎么回事。我已经解决了将适配器备份到backupAdapter,然后在需要调用adapter.notifyDataSetChanged();时将其复制回来的可怕的hacky解决方案。

我发现我第一次使用deleteButton时,resetAdapter发现适配器为null,然后从backupAdapter复制该值。之后就可以了,不需要再次还原。所以我的代码可以用,但是太可怕了。我究竟做错了什么?

public class EditTaskList extends Activity {
    private static ArrayList<Something> list;
    private CustomAdapter adapter;
    private CustomAdapter backupAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_task_edit);
        ListView listView = (ListView)findViewById(R.id.edit_task_listview);
        list = MainActivity.getMasterList();

        CustomAdapter adapter = new CustomAdapter(this, list);
        listView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        backupAdapter = adapter;
    }

    public void resetAdapter(){
        if(adapter == null){
            System.out.println("Not fixed");
            adapter = backupAdapter;
        }
        else{System.out.println("Fixed!");}
        adapter.notifyDataSetChanged();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.edit_task_list, menu);
        return true;
    }

    public class CustomAdapter extends ArrayAdapter<Something>{
        //private Context context;
        private ArrayList<Something> things;
        private LayoutInflater inflater;

        class ViewHolder {
            public TextView text;
            public Button editButton;
            public Button deleteButton;
        }

        public CustomAdapter(Context context, ArrayList<Something> things) {
            super(context, R.layout.edit_task_list_item, things);
            inflater = LayoutInflater.from(context);
            this.things = things;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // reuse views
            ViewHolder viewHolder;
            if (convertView == null) {
                viewHolder = new ViewHolder();
                convertView = inflater.inflate(R.layout.edit_task_list_item, null);
                // configure view holder
                viewHolder.text = (TextView) ConvertView.findViewById(R.id.edit_task_name);
                viewHolder.editButton = (Button) convertView.findViewById(R.id.edit_task_edit);
                viewHolder.deleteButton = (Button) convertView.findViewById(R.id.edit_task_delete);
                convertView.setTag(viewHolder);
            }

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

        viewHolder.text.setTag(position);
        viewHolder.text.setText(things.get(position).toString());
        viewHolder.deleteButton.setTag(position);
        viewHolder.editButton.setTag(position);
        viewHolder.deleteButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
                int tag = (Integer)view.getTag();
                things.remove(tag);
                resetAdapter();
                }
        });

        return convertView;
    }
    }
}
用户

这行:

CustomAdapter adapter = new CustomAdapter(this, list);

创建一个局部变量,因此永远不会初始化字段适配器相反,您想使用以下命令将新创建的适配器分配给该字段:

adapter = new CustomAdapter(this, list);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ListView的自定义适配器

来自分类Dev

自定义ListView的适配器

来自分类Dev

ListView自定义适配器丢失imageView

来自分类Dev

自定义适配器显示RuntimeException-ListView

来自分类Dev

使用自定义适配器过滤ListView

来自分类Dev

自定义listview适配器上的OnclickListner

来自分类Dev

ListView自定义适配器重复项

来自分类Dev

自定义基础适配器到ListView

来自分类Dev

使用自定义适配器从listview搜索项目

来自分类Dev

Android ListView onClickListener自定义适配器

来自分类Dev

使用自定义适配器未显示ListView

来自分类Dev

自定义ListView适配器中的NullPointerException

来自分类Dev

ListView自定义适配器丢失imageView

来自分类Dev

Android自定义ListView /适配器

来自分类Dev

在自定义适配器中遍历ListView

来自分类Dev

Android ListView onItemclick以及自定义适配器

来自分类Dev

使用自定义数组适配器,ListFragment中的项目不会显示在Listview中

来自分类Dev

使用自定义数组适配器,ListFragment中的项目不会显示在Listview中

来自分类Dev

在自定义数组适配器中更改listview的布局

来自分类Dev

listview项目未在自定义适配器的getview方法中显示分配的值

来自分类Dev

一键获取多个ID(ListView自定义适配器GetView)

来自分类Dev

如何为随机自定义ListView适配器设置按钮单击事件?

来自分类Dev

Android Studio中带有自定义适配器的自定义ListView

来自分类Dev

setOnClickListener不使用自定义适配器和自定义ListView触发

来自分类Dev

使用自定义适配器的ListView中的自定义行

来自分类Dev

如何使用自定义列表适配器显示listView为空

来自分类Dev

RSS阅读器为ListView创建自定义适配器

来自分类Dev

如何使用自定义列表适配器显示listView为空

来自分类Dev

在自定义ListView适配器中按项目时突出显示效果

Related 相关文章

  1. 1

    ListView的自定义适配器

  2. 2

    自定义ListView的适配器

  3. 3

    ListView自定义适配器丢失imageView

  4. 4

    自定义适配器显示RuntimeException-ListView

  5. 5

    使用自定义适配器过滤ListView

  6. 6

    自定义listview适配器上的OnclickListner

  7. 7

    ListView自定义适配器重复项

  8. 8

    自定义基础适配器到ListView

  9. 9

    使用自定义适配器从listview搜索项目

  10. 10

    Android ListView onClickListener自定义适配器

  11. 11

    使用自定义适配器未显示ListView

  12. 12

    自定义ListView适配器中的NullPointerException

  13. 13

    ListView自定义适配器丢失imageView

  14. 14

    Android自定义ListView /适配器

  15. 15

    在自定义适配器中遍历ListView

  16. 16

    Android ListView onItemclick以及自定义适配器

  17. 17

    使用自定义数组适配器,ListFragment中的项目不会显示在Listview中

  18. 18

    使用自定义数组适配器,ListFragment中的项目不会显示在Listview中

  19. 19

    在自定义数组适配器中更改listview的布局

  20. 20

    listview项目未在自定义适配器的getview方法中显示分配的值

  21. 21

    一键获取多个ID(ListView自定义适配器GetView)

  22. 22

    如何为随机自定义ListView适配器设置按钮单击事件?

  23. 23

    Android Studio中带有自定义适配器的自定义ListView

  24. 24

    setOnClickListener不使用自定义适配器和自定义ListView触发

  25. 25

    使用自定义适配器的ListView中的自定义行

  26. 26

    如何使用自定义列表适配器显示listView为空

  27. 27

    RSS阅读器为ListView创建自定义适配器

  28. 28

    如何使用自定义列表适配器显示listView为空

  29. 29

    在自定义ListView适配器中按项目时突出显示效果

热门标签

归档