티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Recyclerview not call onCreateViewHolder

Recyclerview가 onCreateViewHolder를 호출하지 않음

 문제 내용 

My RecyclerView does not call onCreateViewHolder, onBindViewHolder even MenuViewHolder constructor, therefore nothing appears in RecyclerView. I put logs for debugging, and no log is shown. What might be the problem?

제 RecyclerView는 onCreateViewHolder, onBindViewHolder 심지어 MenuViewHolder 생성자도 호출하지 않으므로 RecyclerView에 아무 것도 표시되지 않습니다. 디버깅을 위해 로그를 넣었는데 로그가 표시되지 않습니다. 무엇이 문제일까요?

 

My adapter:

내 어댑터:
public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> {
private LayoutInflater inflater;
List<Menu> data = Collections.emptyList();

public MenuAdapter(Context context, List<Menu> data) {
    Log.i("DEBUG", "Constructor");
    inflater = LayoutInflater.from(context);
    Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString());
    this.data = data;
    for(Menu menu: this.data){
        Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu);
    }
}

@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.row_menu, parent, false);
    MenuViewHolder holder = new MenuViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MenuViewHolder holder, int position) {
    Log.i("DEBUG MENU", "onBindViewHolder");
    Menu current = data.get(position);
    holder.title.setText(current.menu);
}

@Override
public int getItemCount() {
    return 0;
}

class MenuViewHolder extends RecyclerView.ViewHolder {
    TextView title;
    ImageView icon;

    public MenuViewHolder(View itemView) {
        super(itemView);
        title = (TextView) itemView.findViewById(R.id.menuText);
    }
}

 

My custom row XML:

내 사용자 지정 행 XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/menuText"
    android:text="Dummy Text"
    android:layout_gravity="center_vertical"
    android:textColor="#222"/>

 

and my Fragment:

그리고 내 프래그먼트:
public NavigationFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false"));
    if (savedInstanceState != null) {
        mFromSavedInstaceState = true;
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View view = inflater.inflate(R.layout.fragment_navigation, container, false);
    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.drawer_list);
    MenuAdapter adapter = new MenuAdapter(getActivity(), getData());
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(adapter);
    return view;
}

 

 

 높은 점수를 받은 Solution 

Another one is make sure you set layout manager to RecyclerView:

또 다른 하나는 레이아웃 관리자를 RecyclerView로 설정했는지 확인하는 것입니다.
recycler.setLayoutManager(new LinearLayoutManager(this));

 

 

 가장 최근 달린 Solution 

I really really hope this helps someone someday. I just spent over an hour on this one going nuts!

저는 이것이 언젠가 누군가에게 정말로 도움이 되기를 바란다. 한 시간 넘게 이 일에 몰두했어요!

 

I had this:

저는 이것을 가졌다:
projects_recycler_view.apply {
            this.layoutManager = linearLayoutManager
            this.adapter = adapter
        }

 

When I should have had this:

내가 이걸 가졌어야 했을 때:
projects_recycler_view.apply {
            this.layoutManager = linearLayoutManager
            this.adapter = projectAdapter
        }

 

Because I foolishly called my adapter adapter, it was being shadowed by the recycler view's adapter in the apply block! I renamed the adapter to projectAdapter to differentiate it and problem solved!

내가 바보같이 어댑터를 불렀기 때문에, 그것은 적용 블록에서 RecyclerView의 어댑터에 의해 가려져 있었습니다! 차별화를 위해 어댑터 이름을 projectAdapter로 변경하여 문제를 해결했습니다!

 

 

 

출처 : https://stackoverflow.com/questions/27809524/recyclerview-not-call-oncreateviewholder

반응형
댓글
공지사항
최근에 올라온 글