2016-07-25 2 views
1

비슷한 질문에 대한 답변에 따라 코드를 수정했지만 그 중 아무 것도 작동하지 않았습니다. TabFragments 및 RecyclerViews를 사용하고 있습니다. 콘솔에 "E/RecyclerView : 어댑터가 연결되지 않았으며 레이아웃을 건너 뛰고 있습니다"라는 오류가 네 번 표시됩니다.E/RecyclerView : 어댑터가 연결되지 않았습니다. 레이아웃 건너 뛰기 (FRAGMENTS 사용)

(수정할 때 "java.lang.NullPointerException : 가상 메소드를 호출하려고 시도했습니다. '); void android.support.v7.widget.RecyclerView.setLayoutManager (android.support.v7.widget.RecyclerView $ LayoutManager) 'null 객체 참조에 ", 아마도 그들이 상관됩니다).

어댑터

public class IngredientAdapter extends RecyclerView.Adapter<IngredientAdapter.ViewHolder>{ 

public ArrayList<Ingredient> dataset = new ArrayList<>(); 
public Context ctx; 


public static class ViewHolder extends RecyclerView.ViewHolder { 

    public View view; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     view = itemView; 
    } 
} 

public IngredientAdapter(Context ctx){ 
    super(); 
    this.ctx = ctx; 
} 

@Override 
public IngredientAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.ingredient_row, parent, false); 

     ViewHolder vh = null; 
     vh = new ViewHolder(v);  

     return vh; 
} 

public void setDataset(ArrayList<Ingredient> dataset) { 
    this.dataset.clear(); 
    this.dataset = dataset; 
    this.notifyItemRangeInserted(0, this.dataset.size() - 1); 
} 

@Override 
public void onBindViewHolder(IngredientAdapter.ViewHolder holder, int position) { 
    ImageView image = (ImageView) holder.view.findViewById(R.id.ingredient_image); 
    image.setImageBitmap(dataset.get(position).getImage()); 
    TextView name = (TextView)holder.view.findViewById(R.id.ingredient_name); 
    name.setText(dataset.get(position).getName()); 
} 

@Override 
public int getItemCount() { 
    return dataset.size(); 
} 

}

TABFRAGMENT

public class TabFragmentIngredients extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.recyclerview_list, container, false); 
    rootView.setTag("RecyclerViewFragment"); 
    RecyclerView recycler = (RecyclerView) rootView.findViewById(R.id.recycler_view); 


    final LinearLayoutManager layoutManager = new LinearLayoutManager(this.getActivity()); 
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    recycler.setLayoutManager(layoutManager); 

    ArrayList ingredients = new ArrayList<Ingredient>(); 
    ingredients.add(new Ingredient("carrot", BitmapFactory.decodeResource(this.getContext().getResources(),R.drawable.carrot))); 
    System.out.println(ingredients.size()); 
    IngredientAdapter adapter = new IngredientAdapter(this.getContext()); 
    adapter.setDataset(ingredients); 
    recycler.setAdapter(adapter); 

    return inflater.inflate(R.layout.recyclerview_list, container, false); 
} 

}

답변

2

변경 return inflater.inflate(R.layout.recyclerview_list, container, false);return rootView;

+0

내가 좀 더 상황을 타개했고이 일을 주셔서 감사합니다! – user6319192

+0

그 밖의 무엇을 바꿨습니까? 나는 같은 문제를 겪고있다. – tccpg288

+0

이봐, 난이 같은 문제가 발생 공유하시기 바랍니다 감사합니다 :) –

0

나는 어댑터에 넣어 :

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.ingredient_row, parent, false); 
    return new ViewHolder(v); 
} 

과 탭의 조각 :

return rootView; 
관련 문제