2015-02-09 41 views
0

android fragment無法在listview中顯示sqlite數據下面是我的代碼。我不明白我做錯了什麼。android片段sqlite如何獲取所有數據

公共類WindowsFragment擴展ListFragment {

@SuppressWarnings("null") 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    /** Creating array adapter to set data in listview */ 

    ArrayList<ContactListItems> contactList = new ArrayList<ContactListItems>(); 
    contactList.clear(); 
    String query = "SELECT * FROM PHONE_CONTACTS "; 
    Cursor c1 = SqlHandler.selectQuery(query); 
    if (c1 != null && c1.getCount() != 0) { 
     if (c1.moveToFirst()) { 
      do { 
       ContactListItems contactListItems = new ContactListItems(); 

       contactListItems.setName(c1.getString(c1 
         .getColumnIndex("name"))); 

      } while (c1.moveToNext()); 
     } 
    } 
    c1.close(); 

    ContactListAdapter contactListAdapter = new ContactListAdapter(
      getActivity(), contactList); 


    ListView simple_list_item_multiple_choice = null; 
    simple_list_item_multiple_choice.setAdapter(contactListAdapter); 

    return super.onCreateView(inflater, container, savedInstanceState); 
} 

@Override 
public void onStart() { 
    super.onStart(); 

    /** Setting the multiselect choice mode for the listview */ 
    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
} 

以下是我的名單adapter`public類ContactListAdapter延伸BaseAdapter {

Context context; 
ArrayList<ContactListItems> contactList; 

public ContactListAdapter(Context context, ArrayList<ContactListItems> list) { 

    this.context = context; 
    contactList = list; 
} 

@Override 
public int getCount() { 

    return contactList.size(); 
} 

@Override 
public Object getItem(int position) { 

    return contactList.get(position); 
} 

@Override 
public long getItemId(int position) { 

    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup arg2) { 
    ContactListItems contactListItems = contactList.get(position); 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.contact_list_row, null); 

    } 

    TextView tvName = (TextView) convertView.findViewById(R.id.tv_name); 
    tvName.setText(contactListItems.getName()); 
    TextView tvPhone = (TextView) convertView.findViewById(R.id.tv_phone); 
    tvPhone.setText(contactListItems.getPhone()); 

    return convertView; 
} 

}

我能夠使用活動成功運行但不能使用片段

回答

0

您沒有將值插入到聯繫人列表數組中。傳遞給listviewadapter時,contactList爲空。

添加該行將解決您的問題,它會將ContactListItems對象插入到Arraylist中。如下

contactList.add(contactListItems);

代碼:

if (c1 != null && c1.getCount() != 0) { 
    if (c1.moveToFirst()) { 
     do { 
      ContactListItems contactListItems = new ContactListItems(); 

      contactListItems.setName(c1.getString(c1 
        .getColumnIndex("name"))); 
       contactList.add(contactListItems); 

     } while (c1.moveToNext()); 
    } 
} 
c1.close(); 

另外在你的列表視圖代碼,我沒有看到你顯示的值。

0

在這裏:

if (c1 != null && c1.getCount() != 0) { 
    if (c1.moveToFirst()) { 
     do { 
      ContactListItems contactListItems = new ContactListItems(); 

      contactListItems.setName(c1.getString(c1 
        .getColumnIndex("name"))); 

     } while (c1.moveToNext()); 
    } 
} 

你不給你contactList添加任何東西。

而且,我會使用SQLiteDatabase的查詢方法,而不是原始字符串查詢:

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

只需設置表和列的表名和新的String [] { 「名」} ,其他所有內容爲空以從表中選擇每個名稱。

相關問題