2016-10-04 106 views
-2

最初我有一個ArrayList<Book>完美的功能。但是,我想在PopUp菜單中顯示我的書籍列表,因爲AlertDialog.BuildersetMultiChoiceItems是我所做的合適選擇。所以我不得不將這個ArrayList轉換成CharSequence。到現在爲止還挺好。現在的問題是:我想顯示之前在RecyclerView中選擇的選項(已經編碼),但我需要我的對象的getter和setter。這怎麼解決?比較不同類型的ArrayList

(EDIT)

fab.setOnClockListener (new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     final ArrayList<Integer> bookSel = new ArrayLis(); 
     ArraList<Book> arrayBook = (ArrayList<Book>) bd.getBooks(); 

     final CharSequence[] cs = new CharSequence[arrayBook.size()]; 
     for (int i = 0; i < arrayBook.size(); i++) { 
      cs[i] = String.valueOf(arrayBook.get(i)); 
     } 

     final AlertDialog.Builder alertBuilder = new AlertDialog.Builder (getActivity()); 
     alertBuilder.setTitle("Books") 
     .setMultiChoiceItems(cs, null, new DialogInterface.OnMultiChoiceClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
       if (isChecked) { 
        bookSel.add(which); 
       } else if (bookSel.contains(which)) { 
        bookSel.remove(Integer.valueOf(which)); 
       } 
      } 
     }); 
     alertBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onCLick(DialogInterface dialog, int which) { 
       ArrayList<String> listAux = new ArrayList<>(); 
       for (int i = 0; i < bookSel.size(); i++) { 
        listAux.add(String.valueOf(cs[bookSel.get(i)])); 
       } 
       BookAdapter adp = new BookAdapter(getActivity(),/*send the object<Book>*/); 
       recyclerView.setAdapter(adp); 
      } 
     }); 
    } 
}); 

回答

0
String[] bookListAlert; 
boolean[] checkedBooks; 
ArrayList<String> bookNames = new ArrayList<String>(); 
List<Book> bookDetails = new ArrayList<Book>(); 
bookDetails = bookList.getlistOfBooks(); 
checkedColors = new boolean[bookDetails.size()]; 
    for (int i = 0; i < bookDetails.size(); i++) { 
     checkedBooks[i] = false; 
     strBookName= bookDetails.get(i).getBookName(); 
     bookNames.add(strBookName); 
    } 
     bookListAlert = bookNames.toArray(new String[access.size()]); 
AlertDialog.Builder builder = new AlertDialog.Builder(
      BookScreen.this); 

    builder.setMultiChoiceItems(bookListAlert, checkedColors, 
      new DialogInterface.OnMultiChoiceClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which, 
         boolean isChecked) { 

        ((AlertDialog) dialog).getButton(
          AlertDialog.BUTTON_POSITIVE).setEnabled(true); 
        boolean isCheckedBooks = true; 
        for (i = 0; i < checkedBooks.length; i++) { 
         if (!checkedBooks[i]) { 
          isCheckedBooks = false; 
         } else { 
          isCheckedBooks = true; 
          break; 
         } 
        } 
        if (!isCheckedBooks) { 

         ((AlertDialog) dialog).getButton(
           AlertDialog.BUTTON_POSITIVE).setEnabled(
           true); 

        } else { 
         ((AlertDialog) dialog).getButton(
           AlertDialog.BUTTON_NEUTRAL).setEnabled(
           false); 
        } 
       } 
      }); 
    builder.setCancelable(false); 
    builder.setTitle("Books"); 
    builder.setPositiveButton("DONE", 
     new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
    )}; 
+0

如果您分享您的代碼將很容易幫助您。謝謝 – Bethan

+0

好的。我現在編輯。 –