2017-09-07 3 views
0

StackOverflowのこの問題に関連する記事は、さまざまな組み合わせですべて試してみましたが、RecyclerView.Adapterを表示するにはRecyclerViewを表示できません。デバッグモードで表示されますが、情報は表示されません。Androidスタジオ:E/RecyclerView:アダプターは接続されていません。レイアウトをスキップする

私のコード(私はXMLレイアウトファイルを貼り付けるのに苦労):

public class RecipeDetailActivity extends AppCompatActivity { 
    private RecipeModel mRecipe; 
    private ArrayList<IngredientModel> mIngredientList = new ArrayList<>(); 
    private IngredientListAdapter ingredientListAdapter; 
    private RecyclerView rvIngredientList; 
    private boolean mTwoPane; 
    private ListView listView; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_recipe_detail); 

     rvIngredientList = (RecyclerView)findViewById(R.id.rv_ingredient_list); 
     LinearLayoutManager layoutManager = new LinearLayoutManager(this); 
     layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     rvIngredientList.setLayoutManager(layoutManager); 
     SampleRecycler sampleRecycler = new SampleRecycler(); // empty RecyclerView.Adapter 
     rvIngredientList.setAdapter(sampleRecycler); 

     mRecipe = getIntent().getParcelableExtra("com.wernerraubenheimer.bakingapp.data.RecipeModel"); 

     mIngredientList = mRecipe.getIngredients(); 
     ingredientListAdapter = new IngredientListAdapter(mIngredientList); 
     ingredientListAdapter.notifyDataSetChanged(); 
     // Up until this point the RecyclerVie.Adapter is populated with data - debug mode I can see the list 
     rvIngredientList.swapAdapter(ingredientListAdapter, false); 
    } 
} 

public class IngredientListAdapter extends RecyclerView.Adapter<IngredientListAdapter.IngredientViewHolder> { 
    private ArrayList<IngredientModel> mIngredientList; 
    private Context mContext; 
    private boolean mTwoPane; 

    public IngredientListAdapter(ArrayList<IngredientModel> ingredientList) { 
     mIngredientList = ingredientList; 
    } 

    @Override 
    public IngredientViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     mContext = parent.getContext(); 
     int layoutIdForListItem = R.layout.ingredient_list_item; 
     LayoutInflater inflater = LayoutInflater.from(mContext); 
     boolean attachImmediatelyToParent = false; 

     View view = inflater.inflate(layoutIdForListItem, parent, attachImmediatelyToParent); 
     IngredientViewHolder viewHolder = new IngredientViewHolder(view); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(IngredientViewHolder holder, int position) { 
     IngredientModel ingredient = mIngredientList.get(position); 
     holder.bind(mContext, ingredient); 
    } 

    @Override 
    public int getItemCount() { 
     if (mIngredientList != null) { 
      return 0; 
     } else { 
      return mIngredientList.size(); 
     } 
    } 

    static class IngredientViewHolder extends RecyclerView.ViewHolder { 
     private CardView cardviewContainer; 
     private TextView tvIngredientName; 
     private TextView tvIngredientQuantity; 
     private TextView tvIngredientMeasure; 
     private Context mContext; 
     private IngredientModel mIngredient; 

     IngredientViewHolder(View itemView) { 
      super(itemView); 

      //cardviewContainer = (CardView)itemView.findViewById(R.id.card_view_ingredient); 
      tvIngredientName = (TextView)itemView.findViewById(R.id.text_view_ingredient_name); 
      tvIngredientQuantity =(TextView)itemView.findViewById(R.id.text_view_quantity); 
      tvIngredientMeasure = (TextView)itemView.findViewById(R.id.text_view_measure); 
     } 

     void bind(Context context, IngredientModel ingredientModel) { 
      mContext = context; 
      mIngredient = ingredientModel; 

      tvIngredientName.setText(mIngredient.getIngredient()); 
      tvIngredientQuantity.setText(mIngredient.getQuantity()); 
      tvIngredientMeasure.setText(mIngredient.getMeasure()); 
     } 
    } 
} 

答えて

0

が、問題には次の関数であるように見える 、あなたが貼り付けられているコードから解読することは困難です。

@Override 
public int getItemCount() { 
    if (mIngredientList != null) { 
     return 0; 
    } else { 
     return mIngredientList.size(); 
    } 
} 

条件をif (mIngredientList == null) {に変更すると問題が解決するはずです。

また、RecipeDetailActivity.onCreate()方法では、唯一の次のコードは、リストを表示するのに十分でなければなりません:そのような愚かな間違いだった

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_recipe_detail); 
    rvIngredientList = (RecyclerView) findViewById(R.id.rv_ingredient_list); 
    rvIngredientList.setLayoutManager(new LinearLayoutManager(this)); 

    mRecipe = getIntent().getParcelableExtra("com.wernerraubenheimer.bakingapp.data.RecipeModel"); 
    mIngredientList = mRecipe.getIngredients(); 

    ingredientListAdapter = new IngredientListAdapter(mIngredientList); 
    rvIngredientList.setAdapter(ingredientListAdapter); 
} 
+0

おかげで、。しかし、1つのアイテムだけが表示されます。私はもう少しそれに取り組んでいきます。 – Werner

関連する問題