sourcecode

Recyserview가 CreateView를 호출하지 않음홀더

copyscript 2022. 8. 1. 22:39
반응형

Recyserview가 CreateView를 호출하지 않음홀더

★★★RecyclerView는, 「」을 호출하지 .onCreateViewHolder,onBindViewHolder심지어.MenuViewHolder되지 않습니다.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"/>

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

다른 하나는 레이아웃 관리자를 RecycleerView로 설정하는 것입니다.

recycler.setLayoutManager(new LinearLayoutManager(this));

의 ★★★★★★★★★★★★★★★★★.getItemCount 법 methodreturns 0RecyclerView뷰를 인스턴스화하려고 하지 않습니다.를 돌려주다greater than 0.

예를들면

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

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

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

언젠가 이 일이 누군가에게 도움이 되길 진심으로 바랍니다.난 한 시간 넘게 이 일에 몰두했어!

이런 게 있었어요.

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

내가 이걸 가졌어야 했을 때:

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

를 잘못 adapter적용 블록에 있는 재활용 뷰의 어댑터에 의해 그림자가 드리워지고 있었습니다.구별하기 위해 어댑터 이름을 projectAdapter로 변경했는데 문제가 해결되었습니다!

를 「레이아웃 매니저」로 .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.setHasFixedSize(true);

" "가 할 수 .onBindView ★★★★★★★★★★★★★★★★★」onCreateViewHolder전혀 호출되지 않고 로그에 오류가 기록되지 않습니다.

누군가에게 도움이 될 수도 있지만 RecycleView의 가시성을 GOWN으로 설정하면 어댑터 메서드는 호출되지 않습니다.알아내는 데 시간이 좀 걸렸어요

중요한 것은 어댑터가 실제로 초기화되기 전에 리사이클러 뷰 어댑터를 설정할 때 확인했습니다.해결방법은 확실히 하는 것이었다.recyclerView.setAdapter(adapter)는 비접속 되었습니다.

의 설정TextView custom.xml ★★★★★★★★★★★★★★★★★」RecyclerView가가인 wrap-content , . . . . . . . .RecyclerView을 사용하다

은 나의 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.RecyclerView에 있었다ScrollViewAndroid Support Library 23.0입니다.위해 23. 해해 android support Android Library 23으로 했습니다.2시 30분입니다.

build.gradle의 경우:

dependencies {
    ...
    compile 'com.android.support:appcompat-v7:23.2.+'
    compile 'com.android.support:cardview-v7:23.2.+'
}

도 같은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★android.support.constraint.ConstraintLayout를 참조해 주세요.「 」로 FrameLayout도움이 되었습니다.

어댑터 클래스에 추가

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

다른 옵션은 get을 사용하여 이 목록 Objetc를 전송하는 경우, 예를 들어 올바른 참조가 있는지 확인하는 것입니다.

private list<objetc> listObjetc;
//Incorrect
public void setListObjetcs(list<objetc> listObjetc){
  listObjetc = listObjetc;
}

//Correct
public void setListObjetcs(list<objetc> listObjetc){
  this.listObjetc = listObjetc;
}

내 경우 목록 크기가 0이었고 onCreateView를 호출하지 않았습니다.홀더 방식빈 목록의 중앙에 자리 표시자로 메시지를 표시해야 해서 이렇게 했더니 참 잘 되더라고요.@Constantin Burov의 답변이 도움이 되었습니다.

  @Override
public int getItemCount() {
    if (contactList.size() == 0) {
        return 1;
    } else {
        return contactList.size();
    }
}

나는 이 문제로 몇 시간 동안 고생했다.츠키노 것입니다.view음음음음 뭇매하다

ProductGridBinding binding = DataBindingUtil.inflate( inflater, R.layout.product_grid, container, false);



    mLinearLayoutManager = new LinearLayoutManager(getActivity());
    mLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);

    binding.rvNumbers.setHasFixedSize(true);
    binding.rvNumbers.setLayoutManager(mLinearLayoutManager);
    binding.rvNumbers.setAdapter(adapter);


    View view = binding.getRoot();


    return view;

Android 데이터 바인딩 라이브러리를 사용하는 경우 답변 보기 - recycerview 레이아웃을 설정하고 항목 수는 0보다 커야 합니다.

 @BindingAdapter({"entries", "layout"})
    public static void setEntries(RecyclerView view, ArrayList<LoginResponse.User> listOfUsers, int layoutId) {
        if (view.getAdapter() == null) {
            view.setLayoutManager(new LinearLayoutManager(view.getContext()));
            SingleLayoutAdapter adapter = new SingleLayoutAdapter(layoutId) {
                @Override
                protected Object getObjForPosition(int position) {

                    return listOfUsers.get(position);
                }

                @Override
                public int getItemCount() {
                    return listOfUsers.size();
                }
            };
            view.setAdapter(adapter);
        }
    }

해피 코딩 :-)

wrap_content를 목록 높이와 항목 목록 높이로 입력하면 아무것도 표시되지 않고 recycleerView 함수도 호출되지 않습니다.항목의 높이를 고정하거나 목록 높이로 match_parent를 입력합니다.그것으로 내 문제는 해결되었다.

내 경우 RecyclerView의 ID를 "recyclerView"로 설정합니다.다른 ID로 변경했을 때 어댑터의 메서드가 올바르게 호출되었기 때문에 이 ID는 이미 어딘가에 정의되어 있었던 것 같습니다.

커스텀 어댑터를 사용하고 있는 경우는, 반드시 Item Count 를 컬렉션 사이즈로 설정합니다.

내 담당자는 onBindView였다.RecycleerView.adaptor의 Holder(홀더, 위치) 메서드가 호출되지 않았습니다.메서드 onCreateView홀더가 호출되고 getItemCount가 호출되었습니다.Recycleerview어댑터의 사양을 읽어보면 BindView를 덮어쓰면홀더(홀더, 위치, 목록 페이로드)는 호의적으로 호출됩니다.그러니 조심하세요.

제 실수는 Fragment on Create View에서 잘못된 뷰를 부풀린 것입니다.

xml 앱에서 다음 행을 잊어버렸습니다.layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

또는

    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"

다음 작업을 수행해 주십시오.

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

Binding을 하도록 액티비티를 한 후 Model의 Data Binding을 삭제하는 .setContentView「」로부터의 메서드 onCreate그것을 제거함으로써 나의 문제는 해결되었다.

저는 setHasStableIds(true); 메서드가 설정되었기 때문입니다.그것을 제거하면 작동한다.

recycleer View를 참조해 주세요.setAdapter(어댑터). recycleerView목록은 메서드를 호출하여 입력됩니다.

하세요.XML ★★★★★★★★★★★★★★★★★」Koltin/Java같은 에는 문제.ViewHolder'이것'은 다음과 같습니다.

var txt: AppCompatTextView = itemView.findViewById(R.id.txt)

그러나 내 XML 코드는 다음과 같습니다.

<TextView
        android:id="@+id/txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        .../>

비밀행렬을 다음과 같이 변경해야 했습니다.

var txt: TextView = itemView.findViewById(R.id.txt)

또한 다음 항목도 삭제해야 했습니다.

recyclerView.setHasFixedSize(true);

도움이 되었으면 합니다:)

전화하는 것을 .notifyDataSetChanged()어댑터에서 목록을 설정한 후.

public void setUserList(List<UserList> userList) {
      this.userList = userList;
        notifyDataSetChanged();
}

내 경우 Linear Layout에서 방향을 설정하지 못했습니다.

방향 추가 후 문제 해결.

 android:orientation="vertical"

제 고민은layout_height그리고.layout_widthRecycleerView의 설정0dp.

언급URL : https://stackoverflow.com/questions/27809524/recyclerview-not-call-oncreateviewholder

반응형