2017-06-02 49 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與數據庫