ListView во фрагменте не обновляется

#android #listview #android-fragments

#Android #listview #android-фрагменты

Вопрос:

Я пытаюсь создать список во фрагменте, который может увеличиваться при нажатии кнопки.

Список находится внутри фрагмента.

Вот часть моей 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();
    }

}
  

Итак, теперь я хотел бы добавить элемент в список, нажав на элемент actionbar. Это работает, я могу это подтвердить. Но чтобы увидеть изменения, я должен выйти из приложения и повторно войти, чтобы увидеть какие-либо изменения или изменить ориентацию экрана на альбомную и обратно.
Я хочу, чтобы он сразу отображал обновленный список, но я не знаю как.

 listAdapter.notifyDataSetChanged();
  

у меня НЕ работает, я не знаю почему.
Я также попытался создать новый ListAdapter следующим образом:

 listAdapter = new CustomListAdapter(getApplicationContext());
  

и установите ListView для этого адаптера:

 listView.setAdapter(listAdapter);
  

Но все, что я получаю, это принудительное закрытие (я не знаю почему).

Так что знайте, я понятия не имею, как решить эту проблему. Я хотел бы иметь возможность обновлять ListView немедленно при вызове updateList() метода.

Я получаю этот logCat при попытке применить новый адаптер к listview:

  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
  

Комментарии:

1. измените getApplicationContext() на MainActivity.this и отправьте logcat

2. @IllegalArgument Я добавил свой вывод logcat при попытке применить новый адаптер к listview

3. вы можете просмотреть список в первый раз??

4. Да, в настоящее время у меня в списке около 10 элементов, но иногда при запуске приложения из eclipse отображается только 1. После этого я могу выйти из приложения и повторно ввести его, и в нем отображаются все элементы списка

5. Почему ListFragment статический, пожалуйста, удалите его и проверьте