카테고리 보관물: Java

Java

Recyclerview가 onCreateViewHolder를 호출하지 않습니다 MenuViewHolder holder = new MenuViewHolder(view);

내는 RecyclerView호출하지 않습니다 onCreateViewHolder, onBindViewHolderMenuViewHolder에 따라서 아무것도 나타납니다, 생성자를 RecyclerView. 디버깅을 위해 로그를 넣고 로그가 표시되지 않습니다. 무엇이 문제 일 수 있습니까?

내 어댑터 :

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);
    }
}

내 사용자 지정 행 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"/>

그리고 내 조각 :

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;
}



답변

당신의 getItemCount방법 returns 0. 따라서 RecyclerView뷰를 인스턴스화하려고 시도하지 마십시오. 무언가를 돌려주십시오 greater than 0.

예를 들어

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


답변

다른 하나는 레이아웃 관리자를 RecyclerView로 설정했는지 확인하는 것입니다.

recycler.setLayoutManager(new LinearLayoutManager(this));


답변

추가 한 후에 아래 줄을 추가하는 것을 잊었습니다.

recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));


답변

특정 경우에는 적용되지 않습니다. 그러나 이것은 다른 사람을 도울 수 있습니다.

이 이유는 다음 방법을 부주의하게 사용했을 수 있습니다.

recyclerView.setHasFixedSize(true);

주의 사용되지 않은 경우,이는 발생할 수 있습니다 onBindViewonCreateViewHolder에 로그에 오류없이, 전혀 호출 할 수 없습니다.


답변

RecyclerView아래 코드와 같이 레이아웃 관리자를 설정하십시오 .

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view_right);
//set your recycler view adapter here
NavigationAdapter adapter = new NavigationAdapter(this, FragmentDrawer.getData());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));


답변

가치있는 점을 위해 , 어댑터가 실제로 초기화 되기 전에 리사이클 뷰 어댑터 설정할 때 그것을 관찰했습니다 . 해결책은 recyclerView.setAdapter(adapter)널이 아닌 어댑터로 호출 되었는지 확인하는 것이 었습니다.


답변

나는 이것이 언젠가 누군가에게 도움이되기를 정말로 바랍니다. 나는이 견과류에 1 시간 이상을 보낸다!

나는 이것을 가지고 있었다 :

projects_recycler_view.apply {
            this.layoutManager = linearLayoutManager
            this.adapter = adapter
        }

내가 이것을 가져야했을 때 :

projects_recycler_view.apply {
            this.layoutManager = linearLayoutManager
            this.adapter = projectAdapter
        }

어리석게도 내 어댑터를 호출했기 때문에 adapterapply 블록에서 재활용 뷰의 어댑터로 인해 그림자가되었습니다! 어댑터를 projectAdapter로 이름을 바꾸고 문제를 해결했습니다!