2017-06-02 97 views
0

我在这个onCreateView在一个片段。它包含一个由ListViewAdapterNahrung提供的列表视图。我的问题是这个列表视图不会在adapter.notifyDataSetChanged();之后更新。listview不会更新后adapter.notifyDataSetChanged()

public class NahrungFragment extends Fragment { 
    private ArrayList<HashMap<String, String>> list; 
    HashMap<String,String> temp; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_nahrung, container, false); 

     list=new ArrayList<HashMap<String,String>>(); 
     temp=new HashMap<String, String>(); 
     temp.put("Bezeichnung", "Bezeichnung"); 
     list.add(temp); 

     final ListViewAdapterNahrung adapter=new ListViewAdapterNahrung(getActivity(), list); 
     listView.setAdapter(adapter); 

     etBez.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

       list=new ArrayList<HashMap<String,String>>(); 
       Cursor c=mydatabase.rawQuery("SELECT * FROM nahrung WHERE [bezeichnung] LIKE '%"+etBez.getText().toString()+"%' ", null); 
       if(c.getCount()>0) 
       { 
        while(c.moveToNext()) 
        { 
         temp=new HashMap<String, String>(); 
         temp.put("Bezeichnung", c.getString(0)); 
         list.add(temp); 
        } 
        adapter.notifyDataSetChanged(); 
       } 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 

     return v; 
    } 
} 

这是ListViewAdapterNahrung

public class ListViewAdapterNahrung extends BaseAdapter { 

    public ArrayList<HashMap<String, String>> list; 
    Activity activity; 
    TextView tvBezeichnung; 
    private static final String FIRST_COLUMN="Bezeichnung"; 
    public ListViewAdapterNahrung(Activity activity, ArrayList<HashMap<String, String>> list){ 
     super(); 
     this.activity=activity; 
     this.list=list; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return list.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 



    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     LayoutInflater inflater=activity.getLayoutInflater(); 
     if(convertView == null){ 
      convertView=inflater.inflate(R.layout.listview_nahrung, null); 
      tvBezeichnung=(TextView) convertView.findViewById(R.id.tvName); 
     } 

     HashMap<String, String> map=list.get(position); 
     tvBezeichnung.setText(map.get("Bezeichnung")); 
     return convertView; 
    } 

} 

回答

0

你是不是传递数据传输到适配器,这就是为什么你没有看到数据更新。你必须将数据传递到您的适配器的呼叫adapter.notifyDataSetChanged();

前试试这个:

... 
@Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

      list=new ArrayList<HashMap<String,String>>(); 
      Cursor c=mydatabase.rawQuery("SELECT * FROM nahrung WHERE [bezeichnung] LIKE '%"+etBez.getText().toString()+"%' ", null); 
      if(c.getCount()>0) 
      { 
       while(c.moveToNext()) 
       { 
        temp=new HashMap<String, String>(); 
        temp.put("Bezeichnung", c.getString(0)); 
        list.add(temp); 
       } 
       adapter.updateData(list); 
       adapter.notifyDataSetChanged(); 
      } 
     } 
,,,, 

而在你的适配器:

... 
public void updateData(ArrayList<HashMap<String,String>> data){ 
    this.list.addAll(data); 
} 
... 

或者,如果你想将所有新的数据:

... 
public void updateData(ArrayList<HashMap<String,String>> data){ 
    this.list.clear(); 
    this.list.addAll(data); 
} 
... 
0

使用list.clear(),而不是重新分配到

但是删除数据,您应使用一个CursorAdapter与数据库