2017-11-09 9 views
0

私はORMLiteを使用しています。リストビューにデータを表示したいと思います。たとえば、SMS(ID、番号、メッセージ)のリストを持っています。データと今、私はそれぞれのデータを表示するビューをしたいので、私は、ListViewコントロールを行う方法を見つけたが、私は数と、各行にメッセージを表示する方法がわからない...ORMLiteと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 :

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; 
    } 

} 

答えて

0

まず、リストビューの代わりにRecyclerViewを使用することをお勧めします。第二に、私の提案は、アダプタ内のユーザの全リストを渡すことです。 私はあなたがこれをやりたいと思う:

//... 
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); 
//... 

あなたのアダプターは、文字列の二つの配列を必要としますが、ユーザーのリストからそれらを得ることができます。

+0

私は以下のようにアダプタを変更する必要があります:String [] no? – Ben

+0

SMSAdapterを変更する方法がわかりません – Ben

+0

アダプタでいくつか変更を加えました。 – Ben