7

我有我的適配器沒有方法被稱爲這個奇怪的問題。該構造的作品,它停在那裏,如果我有一個斷點,但在那裏,沒有什麼.. onCreateViewHolder不會被調用也不onBindViewHolder甚至不是getItemCount ..我試過了我可以在網上找到的所有東西,但似乎沒有任何工作,所以我不知道該怎麼辦。有什麼建議麼?這裏是我的代碼: 片段:RecyclerView適配器方法不叫

public class FragmentPackageDetails extends Fragment { 
    //other vars 
    RecyclerView rvPackageDetails; 
    DatabaseHandler database; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Bundle args = getArguments(); 
     String temp = args.getString(KEY_TRACKER_CODE); 
     View v = inflater.inflate(R.layout.fragment_package_details_new, container, false); 

     return v; 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     rvPackageDetails = (RecyclerView) view.findViewById(R.id.rvPackageDetails); 
     rvPackageDetails.setLayoutManager(new LinearLayoutManager(getActivity())); 

     database = new DatabaseHandler(getActivity()); 
     selectedPackage = database.getPackage(trackerCode); 

     RecyclerView.Adapter adapter = new MyAdapter(selectedPackage.getRecords()); 
     rvPackageDetails.setAdapter(adapter); 
    } 
    //other methods in class 
} 

MyAdapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 
    private ArrayList<TrackingRecordCheckedOut> mDataset; 

    // Provide a reference to the views for each data item 
    // Complex data items may need more than one view per item, and 
    // you provide access to all the views for a data item in a view holder 
    public class ViewHolder extends RecyclerView.ViewHolder { 
     // each data item is just a string in this case 
     public TextView tvPackageDetailsRowDayOfWeek, tvPackageDetailsRowDayOfMonth, tvPackageDetailsRowNameOfMonth, 
       tvPackageDetailsRowDetailsTitle, tvPackageDetailsRowDetailsDescription, tvPackageDetailsRowDetialsTime; 

     public ViewHolder(View v) { 
      super(v); 
      tvPackageDetailsRowDayOfWeek = (TextView) v.findViewById(R.id.tvPackageDetailsRowDayOfWeek); 
      tvPackageDetailsRowDayOfMonth = (TextView) v.findViewById(R.id.tvPackageDetailsRowDayOfMonth); 
      tvPackageDetailsRowNameOfMonth = (TextView) v.findViewById(R.id.tvPackageDetailsRowNameOfMonth); 
      tvPackageDetailsRowDetailsTitle = (TextView) v.findViewById(R.id.tvPackageDetailsRowDetialsTime); 
      tvPackageDetailsRowDetailsDescription = (TextView) v.findViewById(R.id.tvPackageDetailsRowDetailsDescription); 
      tvPackageDetailsRowDetialsTime = (TextView) v.findViewById(R.id.tvPackageDetailsRowDetialsTime); 
     } 
    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(ArrayList<TrackingRecordCheckedOut> myDataset) { 
     mDataset = myDataset; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_list_item, parent, false); 
     // set the view's size, margins, paddings and layout parameters 
     ViewHolder vh = new ViewHolder(v); 
     return vh; 
    } 

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     // - get element from your dataset at this position 
     // - replace the contents of the view with that element 
     TrackingRecordCheckedOut tr = mDataset.get(position); 
     holder.tvPackageDetailsRowDayOfWeek.setText(tr.getDayOfWeek()); 
     holder.tvPackageDetailsRowDayOfMonth.setText(tr.getDayOfWeek()); 
     holder.tvPackageDetailsRowNameOfMonth.setText(tr.getMonthOfYear()); 
     holder.tvPackageDetailsRowDetailsTitle.setText(tr.getTitle()); 
     holder.tvPackageDetailsRowDetailsDescription.setText(tr.getDetails()); 
     holder.tvPackageDetailsRowDetialsTime.setText(tr.getTimeOfDay()); 

    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return mDataset.size(); 
    } 

} 

片段佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rvPackageDetails" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

RecyclerView行佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/llPackageDetailsRecyclerViewRow" 
    android:layout_width="match_parent" 
    android:layout_height="96dip" 
    android:orientation="horizontal" 
    android:weightSum="100"> 

    <LinearLayout 
     android:layout_width="0dip" 
     android:layout_height="match_parent" 
     android:layout_weight="20" 
     android:orientation="vertical" 
     android:weightSum="10"> 


     <TextView 
      android:id="@+id/tvPackageDetailsRowDayOfWeek" 
      android:layout_width="match_parent" 
      android:layout_height="0dip" 
      android:layout_weight="3"/> 

     <TextView 
      android:id="@+id/tvPackageDetailsRowDayOfMonth" 
      android:layout_width="match_parent" 
      android:layout_height="0dip" 
      android:layout_weight="4"/> 

     <TextView 
      android:id="@+id/tvPackageDetailsRowNameOfMonth" 
      android:layout_width="match_parent" 
      android:layout_height="0dip" 
      android:layout_weight="3"/> 


    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dip" 
     android:layout_height="match_parent" 
     android:layout_weight="80" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/tvPackageDetailsRowDetailsTitle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="3"/> 

     <TextView 
      android:id="@+id/tvPackageDetailsRowDetailsDescription" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="4"/> 

     <TextView 
      android:id="@+id/tvPackageDetailsRowDetialsTime" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="3"/> 

    </LinearLayout> 

</LinearLayout> 
+0

你肯定'selectedPackage。 getRecords()'不返回空列表? – Rami

+0

是的,我有4個項目裏面 – csanonymus

+0

嘗試將* onViewCreated()*內的代碼移動到* onCreateView()*(RecyclerView的實例化,創建適配器...) – Rami

回答

0

我看着你的代碼做不幸的是沒有真正看到問題。有一件可能有問題的事情是,在你調用super(v)的ViewHolder構造函數中。你可能需要調用super((LinearLayout)v)。這可能沒有什麼區別。

祝你好運!

+0

謝謝你看過它。我試着做你的建議,但它是一樣的.. – csanonymus

0

我有這個地方是被稱爲既不onCreateViewHolder或onBindViewHolder同樣的問題。在適配器的構造保存到上下文的引用,然後改變你的onCreateViewHolder的方法來使用保存的參考上下文而不是做parent.getContext()應該修復它:

private Context mContext; 

public MyAdapter(Context context, ArrayList<TrackingRecordCheckedOut> myDataset) { 
    mDataset = myDataset; 
    mContext = context; 
} 

public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    // create a new view using saved reference to Context (mContext) 
    View v = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_list_item, parent, false); 
    // set the view's size, margins, paddings and layout parameters 
    ViewHolder vh = new ViewHolder(v); 
    return vh; 
}