2016-04-01 157 views
1

在我的活動中,點擊一個按鈕,我打開一個對話框,裏面有一個RecyclerView。在對話框佈局中填充RecyclerView

final Dialog dialog = new Dialog(MyActivity.this); 
dialog.setTitle("Details"); 
dialog.setContentView(R.layout.details_popup); 
RecyclerView detailsRecyclerView = (RecyclerView) dialog.findViewById(R.id.detailsRecyclerView); 
Button detailsCloseButton = (Button) dialog.findViewById(R.id.detailsCloseButton); 

//feedbackResponseSubList contains n items 

**DetailsAdapter detailsAdapter = new DetailsAdapter(R.layout.detail_item, feedbackResponseSubList); 
detailsRecyclerView.setAdapter(detailsAdapter);** 
detailsCloseButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dialog.dismiss(); 
      } 
     }); 
dialog.show(); 

關閉按鈕是可見的,但recyclerView沒有得到填充數據。即使是DetailsDapter的onCreateViewHolder(),onBindViewHolder()和getItemCount()方法也沒有被調用。

回答

1

問題是當您嘗試修改適配器時,Dialog已經創建,因爲它沒有被填充您的數據。

你有兩個選擇,創建你own Dialog延伸Dialog類和onCreate()把你的代碼來填充列表或setAdapter()之後添加adapter.notifyDataSetChanged()告訴列表裏面的數據進行了更新。

1

我已經找到了問題。在使用recyclerview設置佈局管理器後,它工作正常。

LinearLayoutManager layoutManager = new LinearLayoutManager(dialog.getContext()); 
     layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 
     detailsRecyclerView.setLayoutManager(layoutManager); 
1

使用對話框片段而不是對話框。對話框片段提供了對話框的所有功能,同時提供了片段的功能。

public class AlertDialogFragment extends DialogFragment { 

    @Override 
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     //inflate layout with recycler view 
    View v = inflater.inflate(R.layout.details_popup, container, false); 
    RecyclerView detailsRecyclerView = (RecyclerView) getActivity().findViewById(R.id.detailsRecyclerView); 
    DetailsAdapter detailsAdapter = new DetailsAdapter(R.layout.detail_item, feedbackResponseSubList); 
    detailsRecyclerView.setAdapter(detailsAdapter); 
    detailsRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    return v; 
} 

public Dialog onCreateDialog(Bundle SavedInstanceState) { 
    //The rest of the code you will get when u search for dialogfragments