1

我有一个包含按钮和ListView的片段类,当单击该按钮时,DialogFragment将出现在片段类的顶部。它将采取用户输入并将其添加到数据库中,一切正常,但listview不更新,我知道我需要调用adapter.notifyDataChange()我会写psudeo代码。Android - ListView不刷新

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_notes, container, false); 

    add = (Button) view.findViewById(R.id.button1); 

    add.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //New DialogFragment show.dialog 

     } 
    }); 

    filllist(view); 

    return view; 
} 

另一类,创造我DialogFragment

public Dialog onCreateDialog(Bundle savedInstanceState){ 


    final AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()); 

    final View view = getActivity().getLayoutInflater().inflate(R.layout.custom_layout, null); 
    build.setView(view); 

    build.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      final String text = ((EditText) view.findViewById(R.id.randomtext)).getText().toString(); 


       //Call insert method of database helper. pass user input 
       //dismiss 
       adapter.notifyDataSetChanged(); 


     } 
    }); 

    build.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dismiss(); 
     } 
    }); 

    return dialog.create(); 

} 

当用户完成在EDITTEXT领域灌装机在数据库中添加插入数据或解散dialogFragment,但它不更新/刷新列表视图中,我可以在哪里调用notifyDataSetChanged();

回答

1

在调用notifyDataSetChanged之前,您需要实际更改listview的备份数据。例如,如果您创建的适配器如下:

mAdapter = new MyAdapter(context, R.layout.item_listview_layout, mData); 

,那么你需要更新你的mData场,然后才打电话notifyDataSetChanged

+0

好吧,我需要创建一个新的方法调用mAdapter = new MyAdapter(context,R.layout.item_listview_layout,mData);然后adapter.notifyDataSetChanged。作为一个片段,我可以在onActivityCreated中调用这个方法吗? – Mark 2015-03-18 23:56:00

+0

在我可以回答这个问题之前,你可以发布你的DialogFragment中的'adapter'变量是如何初始化的吗? – Mikhail 2015-03-19 00:03:25

+0

适配器只是我的一个listview的自定义布局,并映射出在TextView中获得的数据,但我通过CustomAdapter适配器初始化它;制作一个CustomAdapter的实例。我很可能需要在我的fragment类中调用notifydatachange onActivityCreated而不是onCreateView – Mark 2015-03-19 00:05:26

0

这是一个简单的解决方案。在致电notifyDataSetChanged()之前,您每次都必须更新连接到适配器的列表。例如,如果您的函数命名为setListData(),它将在适配器列表中为您填充数据,您可以在notifyDataSetChanged()之前调用它。 (注意setDataList()只是一个盲例,因为你没有共享这段代码,你的代码可能会有所不同)

就这么简单!希望它的作品✌