2016-10-04 109 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

好的。我现在编辑。 –