2016-09-30 1 views
1

Ich bin neu mit Android und ich bin auf der Suche nach der besten Möglichkeit, eine große Menge an Daten in einer ListView zu laden und sie dann mit SearchView zu filtern. Ich bekomme die Daten aus einer Datenbank mit einer Abfrage, die ca. 25000 Datensätze zurückgibt. Dies ist die Lösung, die ich umsetzen konnte, aber nicht sicher, es ist die beste (sicherlich nicht die schnellste!):Wie kann ich schnell große Datenmengen in einem ListView laden und dann mit einem SearchView filtern?

Dies ist das Fragment:

public class FragmentOne extends Fragment { 

ListView lv; 
MyAdapter myAdapter; 
SearchView sv; 
ArrayList<MyObject> listMyObject; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_one, container, false); 
    return view; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    sv = (SearchView) getView().findViewById(R.id.searchView); 
    lv = (ListView) getView().findViewById(R.id.listView); 
    setData(""); 

    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      setData(newText); 
      return false; 
     } 
    }); 
} 

public void setData(String params) { 
    String query = "select *, count(*) as num from table where field_1 like '" + params + "%' group by field_1 order by field_1"; 
    listMyObject= new ArrayList<>(); 
    DBHelper dbHelper; 
    SQLiteDatabase sqLiteDatabase; 
    String ... ; 
    int ...; 


    dbHelper = DBHelper.getInstance(getActivity().getApplicationContext()); 
    sqLiteDatabase = dbHelper.getReadableDatabase(); 
    Cursor cursor = sqLiteDatabase.rawQuery(query, null); 
    if (cursor.getCount() > 0) { 
     if (cursor.moveToFirst()) { 
      do { 
       ... 
       listMyObject.add(new MyObject(...)); 
      } while (cursor.moveToNext()); 
     } 
    } 
    arrayAdapter = new MyAdapter(getActivity(), R.layout.listview_row, listMyObject); 
    lv.setAdapter(myAdapter); 
    dbHelper.close(); 
} 

wie diese Lösung ist ein bisschen ' langsam (mit vielen Daten), wie kann ich das Laden des Fragments beschleunigen?

Antwort

0

Zuerst überprüfen Sie verfügbare SQLite/ORM Bibliotheken b'z haben sie viele Eigenschaft wie Caching db oder reaktive db etc. implementiert und wählen Sie nach Ihrer Anforderung. Versuchen Sie dann, Daten mithilfe von Paging in SQL-Abfragen zu laden.

Überprüfen Sie diese List of libraries

Verwandte Themen