Fragment中的ListView不会刷新

时间:2014-06-19 16:12:52

标签: android listview android-fragments

我试图在片段中创建一个列表,按下按钮时可以增长。

列表位于片段内。

这是我的MainActivity的一部分:

public class MainActivity extends FragmentActivity {

    public static String[] values = {
        ""
    };
    private static ListView listView;

    public static NotesDbAdapter helper;
    public static ArrayList<Fragment> fragments;
    public static ViewPager viewPager;
    public static CustomPagerAdapter pagerAdapter;
    public static CustomListAdapter listAdapter;

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager)findViewById(R.id.viewpager);
        listAdapter = new CustomListAdapter(this);
        helper = new NotesDbAdapter(this);
        helper.open();
        pagerAdapter = new CustomPagerAdapter(getSupportFragmentManager());
        fragments = new ArrayList<Fragment>();
        fragments.add(new ListFragment());
        Log.d("DEBUG", "HELPER COUNT: " + Integer.toString(helper.fetchAllNotes().getCount()));
        values = new String[helper.fetchAllNotes().getCount()];
        for(int i = 0; i < values.length; i++) {
            values[i] = "KLAPPT";
        }
        updateList();
        viewPager.setAdapter(pagerAdapter);
    }

    public void addNote() {
        Log.d("DEBUG", "new note");
        helper.createNote("", "");
        updateList();
    }


    public class CustomListAdapter extends ArrayAdapter<String> {
        private Context context;
        private int res;
        private TextView textView;
        public CustomListAdapter(Context context) {
            super(context, R.layout.list_item, values);
            this.context = context;
            this.res = R.layout.list_item;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
            View rowView = inflater.inflate(res, parent, false);
            textView = (TextView)rowView.findViewById(R.id.list_item_textview);
            textView.setText(values[position]);
            return rowView;
        }


    }

    public static class ListFragment extends Fragment {


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_list, container, false);
            listView = (ListView)v.findViewById(R.id.fragment_list_listview);
            listView.setAdapter(listAdapter);
            return v;
        }
    }

    public void updateList() {
        values = new String[helper.fetchAllNotes().getCount()];
        for(int i = 0; i < values.length; i++) {
            values[i] = "KLAPPT";
        }
        listAdapter.notifyDataSetChanged();
    }

}

所以现在我想按一个操作栏项目将一个Item添加到列表中。这有效,我可以证实。但要看到更改,我必须离开应用程序并重新进入以查看任何更改或将屏幕方向更改为横向和背面。 我希望它能够立即显示更新的列表,但我不知道如何。

listAdapter.notifyDataSetChanged();

为我工作,我不知道为什么。 我还试图像这样创建一个新的listAdapter:

listAdapter = new CustomListAdapter(getApplicationContext());

并将listView设置为该适配器:

listView.setAdapter(listAdapter);

但我得到的只是一种力量关闭(我不知道为什么)。

所以知道我还没有想过如何解决这个问题。 我希望能够在调用updateList()方法时立即刷新listView。

尝试将新适配器应用于listview时,我得到了这个logCat:

 06-19 18:17:32.506: E/AndroidRuntime(12259): java.lang.RuntimeException: 
Unable to start activity ComponentInfo{com.ochs.androidnotepad/com.ochs.androidnotepad.MainActivity}:     java.lang.NullPointerException

0 个答案:

没有答案