2016-10-04 8 views
-2

Первоначально у меня был один ArrayList<Book> прекрасно функциональный. Но я хотел показать свой список книг в PopUp Menu, потому что этот AlertDialog.Builder с setMultiChoiceItems был подходящим выбором, который я сделал. Поэтому мне пришлось преобразовать этот ArrayList в CharSequence. Все идет нормально. Проблема возникает сейчас: я хочу показать опцию (ы), ранее выбранную в RecyclerView (уже закодированную), но мне нужны эти геттеры и сеттеры моего объекта. Как это можно решить?Сравнить различные типы 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

Хорошо. Сейчас я отредактирую. –

Смежные вопросы