2017-11-09 3 views
0

Ich benutze ORMLite und ich möchte Daten in einer ListView anzeigen, zum Beispiel habe ich eine Liste von SMS (ID, Nummer, Nachricht) so wenn ich eine Abfrage für alle habe ich alle meine Daten und jetzt möchte ich einen Blick tun, um alle Daten angezeigt werden, so fand ich, wie ein Listview zu tun, aber ich weiß nicht, wie in jeder Zeile ...ORMLite und ListView

public class SMSActivity extends Activity { 

    ListView lview; 
    SMSAdapter lviewAdapter; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sms); 



     DatabaseHandler db = new DatabaseHandler(this); 

     Dao<SMS, Integer> SMSDao = null; 

     try { 
      SMSDao = db.getSMSDao(); 
      final List<SMS> users = SMSDao.queryForAll(); 
      Log.d("list", users.toString()); 


      lview = (ListView) findViewById(R.id.mainListView); 

      lviewAdapter = new SMSAdapter(this, ?, ?); 

      System.out.println("adapter => "+lviewAdapter.getCount()); 

      lview.setAdapter(lviewAdapter); 

     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

SMSAdapter die Anzahl und die Nachricht anzuzeigen :

public class SMSAdapter extends BaseAdapter { 
    Activity context; 
    String title[]; 
    String description[]; 

    public SMSAdapter(Activity context, String[] title, String[] description) { 
     super(); 
     this.context = context; 
     this.title = title; 
     this.description = description; 
    } 

    public int getCount() { 
     // TODO Auto-generated method stub 
     return title.length; 
    } 

    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

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

    private class ViewHolder { 
     TextView txtViewTitle; 
     TextView txtViewDescription; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     // TODO Auto-generated method stub 
     ViewHolder holder; 
     LayoutInflater inflater = context.getLayoutInflater(); 

     if (convertView == null) 
     { 
      convertView = inflater.inflate(R.layout.row_sms, null); 
      holder = new ViewHolder(); 
      holder.txtViewTitle = (TextView) convertView.findViewById(R.id.firstLine); 
      holder.txtViewDescription = (TextView) convertView.findViewById(R.id.secondLine); 
      convertView.setTag(holder); 
     } 
     else 
     { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.txtViewTitle.setText(title[position]); 
     holder.txtViewDescription.setText(description[position]); 

     return convertView; 
    } 

} 

Antwort

0

Zunächst würde ich vorschlagen, dass Sie RecyclerView anstelle von ListView verwenden. Zweitens ist auch mein Vorschlag, die ganze Liste der Benutzer im Adapter zu übergeben. Ich glaube, Sie möchten, dies tun:

//... 
lview = (ListView) findViewById(R.id.mainListView); 
List<String> messages = new ArrayList<String>(); 
List<String> numbers = new ArrayList<String>(); 

for(int i = 0; i < users.size(); i++){ 
    SMS sms = users.get(i); 
    messages.add(sms.getMessage()); 
    numbers.add(sms.getNumber()); 
} 
lviewAdapter = new SMSAdapter(this, numbers, messages); 
System.out.println("adapter => "+lviewAdapter.getCount()); 

lview.setAdapter(lviewAdapter); 
//... 

Ihr Adapter erfordert zwei Arrays von Strings und Sie können sie von der Benutzerliste zu bekommen.

+0

Ich muss den Adapter ändern, weil ich verwende: String [] nein? – Ben

+0

Ich sehe nicht, wie man de SMSAdapter ändert – Ben

+0

Es ist in Ordnung, ich habe einige Änderungen an meinem Adapter – Ben