2017-11-09 16 views
0

ORMLite를 사용하고 있으며 listView에 데이터를 표시하고 싶습니다. 예를 들어 SMS (ID, 숫자, 메시지) 목록이있어 모든 쿼리를 수행 할 때 ...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

우선 ListView 대신 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