2014-03-05 30 views
0

我想創建一個對話框,用戶可以在其中選擇一個無線電選項並單擊確定。列表項必須包含來自sqlite數據庫的id和文本(但只向用戶顯示文本)。由於setSingleChoiceItems接受ListAdapter,我可能需要創建一個自定義List適配器並從我的數據庫選擇結果中加載項目。實際上我需要幫助來創建這個自定義ListAdapter。只有在用戶點擊「確定」後,我需要將選定的項目文本和ID保存到各自的SharePreferences字段中。用於AlertDialog的Android SQLite自定義ListAdapter SingleChoiceItems

+0

您是否嘗試過這個東西嗎? – Piyush

+0

我試圖聲明一個ListAdapter,它作爲我的setSingleChoiceItems參數accapted,來完成適配器,雖然我需要幫助來更新這些方法:public View getView(int position,View convertView,ViewGroup parent),public long getItemId int位置)和其他使ListAdpter對象的方法。 – user3382338

回答

1

好,我設法建立我的自定義列表適配器可惜的項目沒有顯示如收音機,這是我的代碼:

public void changePocket(View view) 
{ 
    ListAdapter liAdabter = new ListAdapter() { 

     @Override 
     public void unregisterDataSetObserver(DataSetObserver observer) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void registerDataSetObserver(DataSetObserver observer) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public boolean isEmpty() { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean hasStableIds() { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public int getViewTypeCount() { 

      return 1; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View row = convertView; 
      PocketsObj pocketListItems = pocketsList.get(position); 

      if (convertView == null) { 

       LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
       row = inflater.inflate(layoutResourceID, parent, false); 
      } 

      TextView idText = (TextView) row.findViewById(R.id.pocket_id); 
      if (idText != null) { 
       idText.setText(String.valueOf(pocketListItems._pocket_id)); 
      } 
      TextView nameText = (TextView) row.findViewById(R.id.pocket_name); 
      if (nameText != null) { 
       nameText.setText(pocketListItems._pocket_name); 
      } 
      return row; 
     } 

     @Override 
     public int getItemViewType(int position) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public long getItemId(int position) { 

      return position; 
     } 

     @Override 
     public Object getItem(int position) { 

      return pocketsList.get(position); 
     } 

     @Override 
     public int getCount() { 

      return pocketsList.size(); 
     } 

     @Override 
     public boolean isEnabled(int position) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean areAllItemsEnabled() { 
      // TODO Auto-generated method stub 
      return false; 
     } 
    }; 

    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this, 2);    
    alertBuilder.setTitle(R.string.change_pockets) 
       .setSingleChoiceItems(liAdabter, 1, 
        new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          // TODO Auto-generated method stub 

         } 
        }) 
       .setPositiveButton(R.string.change_pockets_ok, new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 

        } 
       }) 
       .setNegativeButton(R.string.change_pockets_cancel, new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         return;       
        } 
       }); 

    alertBuilder.show(); 
} 

     <TextView 
     android:id="@+id/pocket_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="invisible" > 
    </TextView> 

    <TextView 
     android:id="@+id/pocket_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textSize="15sp" 
     android:layout_margin="5dp" > 
    </TextView>