2014-12-07 149 views
0

在主Activity中,我定義了按鈕並將它們放在onclicklistener上。問題是在viewAll按鈕時,我想從數據庫填充列表視圖,以便我調用該方法db.getAllContacts(),但該代碼不起作用從數據庫中填充ListView

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     name = (EditText)findViewById(R.id.editText1); 
     phone = (EditText)findViewById(R.id.editText2); 
     btnViewAll=(Button)findViewById(R.id.button1); 
     btnAdd=(Button)findViewById(R.id.button2); 
     btnAdd.setOnClickListener(this); 
     btnViewAll.setOnClickListener(this); 

    } 

@Override 
    public void onClick(View view) { 
    MySQLiteHelper db = new MySQLiteHelper(this); 
if(view==btnViewAll) { 
     if(name.getText().toString().trim().length()==0 || phone.getText().toString().trim().length()==0) 
     { 
      showMessage("Error", "Please enter all values"); 
      return; 
     } 
     else{ 
      List<Contact> contact = new ArrayList<Contact>(); 
      contact= db.getAllContacts();  
      ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, contact); 
      ListView listContent = (ListView)findViewById(R.id.List); 
      listContent.setAdapter(adapter); 
     } 
    } 
} 

    public void showMessage(String title,String message) 
    { 
     Builder builder=new Builder(this); 
     builder.setCancelable(true); 
     builder.setTitle(title); 
     builder.setMessage(message); 
     builder.show(); 
    } 
    public void clearText() 
    { 
     name.setText(""); 
     phone.setText(""); 
    } 

在SQLiteHelper文件:

public List<Contact> getAllContacts() { 
     List<Contact> contactList = new ArrayList<Contact>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM contact"; 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 
     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
      Contact contact = new Contact(); 
      contact.setId(Integer.parseInt(cursor.getString(0))); 
      contact.setName(cursor.getString(1)); 
      contact.setPhone(cursor.getString(2)); 
      // Adding contact to list 
      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    }// return contact list 
    return contactList;} 

請幫我

+0

使用一個CursorAdapter來代替。 – Nazgul 2014-12-07 09:55:36

+0

您應該爲您的聯繫人列表使用customAdapter – 2014-12-07 10:13:27

+0

並檢查getAllContacts()方法的日誌,以便它從數據庫中返回聯繫人列表 – 2014-12-07 10:23:08

回答

0

數據庫訪問對象的邏輯很好。主要問題在於陣列適配器。你應該嘗試在你的活動來實現,而不是ListAdapter的使用ArrayAdapter

+0

您能幫助我如何做到這一點?我是一個初學者 – user3552658 2014-12-07 10:54:37

+0

更改listContent.setAdapter(適配器);到listContent.setAdapter(this); IDE應提示您在活動中實現ListAdapter。 然後根據文檔 – 2014-12-07 11:01:30

1

刪除此行: -

ArrayAdapter適配器=新ArrayAdapter(這一點,android.R.layout.simple_list_item_1,接觸);

並添加此: -

ContactListAdapter contactListAdapter =新ContactListAdapter(此,R.layout.contact_list_item,接觸);

ContactListAdapter類: -

public class ContactListAdapter extends ArrayAdapter<Contact> { 
// Declare Variables 
Context context; 
LayoutInflater inflater; 
List<Contact> contactlist; 

public ContactListAdapter(Context context, int resourceId, 
     List<Contact> contactlist) { 
    super(context, resourceId, contactlist); 

    this.context = context; 
    this.contactlist = contactlist; 
    inflater = LayoutInflater.from(context); 
} 

private class ViewHolder { 
    TextView contactId; 
    TextView contactName; 
    TextView contactPhone; 


} 

public View getView(int position, View view, ViewGroup parent) { 
    final ViewHolder holder; 
    if (view == null) { 
     holder = new ViewHolder(); 
     view = inflater.inflate(R.layout.contact_list_item, null); 
     // Locate the TextViews in listview_item.xml 
     holder.contactName = (TextView) view.findViewById(R.id.contact_id); 
     holder.contactName = (TextView) view.findViewById(R.id.contact_name); 
     holder.contactPhone = (TextView) view.findViewById(R.id.contact_phone); 

     view.setTag(holder); 
    } else { 
     holder = (ViewHolder) view.getTag(); 
    } 
    // Capture position and set to the TextViews 
    holder.contactId.setText(contactlist.get(position).getContactId()); 
    holder.contactName.setText(contactlist.get(position).getContactName()); 
    holder.contactPhone.setText(contactlist.get(position).getContactPhone()); 


    return view; 
} 

}

和contact_list_item.xml: -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:padding="10dp"> 

<TextView 
    android:id="@+id/contact_id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:text="test"/> 

<TextView 
    android:id="@+id/contact_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:text="test"/> 

<TextView 
    android:id="@+id/contact_phone" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" /> 

+0

執行該方法謝謝..但是,此代碼給我的錯誤: ContactListAdapter contactListAdapter = new ContactListAdapter(this,R.layout.contact_list_item,contact); 它說構造函數沒有定義 – user3552658 2014-12-08 18:37:41

+0

檢查你傳遞給構造函數的3個參數。這些參數都是返回所需的值。我在ContactListAdapter類中定義了它 – 2014-12-09 11:16:14