2012-10-02 40 views
0

我對Android非常陌生,需要一些指導。帶有CheckBox指南的ListView SQLite

到目前爲止我有兩個活動。第一個包含一個ActionBar和一個ListView。我希望ListView填充包含TextView和CheckBox的行。該文本由從數據庫中讀取的用戶名錶示。ActionBar具有用於操作的按鈕:「新」和「刪除」。 「新建」會打開一個新的活動,將新用戶添加到數據庫中,刪除操作應從列表和數據庫中刪除已檢查的條目。屏幕:

主要活動:http://imgur.com/ILljQ

創建簡歷活動:http://imgur.com/EbpD3

要得到這些我用SQLiteHelper和數據庫,併爲ListView自定義ArrayAdapter數據源。我有一個問題和一些問題,列在下面。

1。問題是:當我添加一個新用戶時,我只能在使用後退按鈕退出應用程序後才能看到ListView中的更改。

2。是一個自定義的ArrayAdapter的一個很好的解決方案,或者我應該使用CursorAdapter?點擊後,列表項應該使用與其關聯的信息到另一個活動/片段中。以下是我的自定義適配器。它現在可以工作,但下一步是實施刪除操作,我不完全確定我是如何做到的。這是我需要諮詢的地方。謝謝!

public class CustomUserAdapter extends ArrayAdapter<UserProfile>{ 

     ArrayList<UserProfile> users; 
     private LayoutInflater inflater; 

     public CustomUserAdapter(Context context, ArrayList<UserProfile> users) { 
     // TODO Auto-generated constructor stub 
     super(context, R.layout.users_list_row, users); 
     this.users = users; 
     inflater = LayoutInflater.from(context); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
     UserProfile user = users.get(position); 
     CheckBox checkBox; 
     TextView textView; 

     if(convertView == null){ 
      convertView = inflater.inflate(R.layout.users_list_row, null); 
      checkBox = (CheckBox) convertView.findViewById(R.id.checkElement); 
      textView = (TextView) convertView.findViewById(R.id.textElement); 

      //tag row 
      convertView.setTag(new UserHolder(textView, checkBox)); 
     } else { 
      UserHolder userHolder = (UserHolder) convertView.getTag(); 
      checkBox = userHolder.getCheckBox(); 
      textView = userHolder.getUserText(); 
     } 

     //tag checkbox 
     checkBox.setTag(user); 

     //checkbox listener 
     checkBox.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
      } 
     }); 

     checkBox.setChecked(false); 
     textView.setText(user.getUsername()); 

     return convertView; 
      } 
     } 

回答

1

1)更改你的數組列表後,記得調用「adapter.notifyDataSetChanged();」在與您的列表視圖鏈接的適配器上

2)arrayadapter應該工作得很好。請記住,何時從陣列列表中刪除聯繫人,然後再在適配器上再次調用notfiydataset更改。另外請記住,爲了刪除對象的Sql條目,您需要一個ID或某種可以引用到SQLite數據庫的ID(ID,自動增量是標準的)

這裏是一個示例在每個項目上實現監聽器並使用對話框刪除。

list.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) { 
      // TODO Auto-generated method stub 
      AlertDialog.Builder dialog = new AlertDialog.Builder(ContactExampleActivity.this); 
      dialog.setTitle("title"); 
      dialog.setMessage("message"); 
      dialog.setPositiveButton("delete", new DialogInterface.OnClickListener(){ 
       public void onClick(DialogInterface dialog, int which) { 
        //delete from array and delete from sqlite database here 

        adapter.notifyDataSetChanged(); 
       } 
      }); 
0

的問題:當我添加一個新用戶,我只能看到在ListView的變化後,我退出使用返回按鈕的應用程序。

將新用戶添加到您的ArrayList(users)後,請務必在您的適配器上撥打notifyDataSetChanged()

自定義的ArrayAdapter是一個很好的解決方案,或者我應該使用CursorAdapter?

如果UserProfile相當輕便,並且不會有任何方法(即它只是數據),那麼CursorAdapter可能對您有一些好處。否則,我會堅持ArrayAdapter。

單擊時,列表項應將與其關聯的信息用於其他活動/片段。以下是我的自定義適配器。它現在可以工作,但下一步是實施刪除操作,我不完全確定我是如何做到的。這是我需要諮詢的地方。

如何實現刪除按鈕將取決於上述代碼中不清楚的幾個因素。您可以使用複選框偵聽器跟蹤已選擇的項目,然後單擊垃圾桶圖標時刪除所有選中的項目。在這種情況下,請確保notifyDataSetChanged()

+0

非常感謝。 – johnpeterman