viethoa / recyclerview-alphabet-fast-scroller-android

This is fast scroller alphabet for android, support version 14 to lastest
56 stars 16 forks source link

ClassCastException #4

Closed dungockim closed 7 years ago

dungockim commented 7 years ago

Sorry my English poor The Exception was showing when i touch recyclerview. How can i fix it? java.lang.ClassCastException: kim.adapters.NuocUongAdapter cannot be cast to com.viethoa.RecyclerViewFastScroller$BubbleTextGetter at com.viethoa.RecyclerViewFastScroller.setRecyclerViewPositionWithoutScrolling(RecyclerViewFastScroller.java:173) at com.viethoa.RecyclerViewFastScroller.access$500(RecyclerViewFastScroller.java:29) at com.viethoa.RecyclerViewFastScroller$1.onScrolled(RecyclerViewFastScroller.java:126) at android.support.v7.widget.RecyclerView.dispatchOnScrolled(RecyclerView.java:4305) at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1624) at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2704) at android.view.View.dispatchTouchEvent(View.java:9019) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2701) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2413) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2712) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2428) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2712) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2428) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2712) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2428) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2712) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2428) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2712) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2428) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2712) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2428) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2712) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2428) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2679) at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1797) at android.app.Activity.dispatchTouchEvent(Activity.java:2878) at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:63) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2640) at android.view.View.dispatchPointerEvent(View.java:9224) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4813) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4651) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4202) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4255) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4221) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4331) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4229) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4388) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4202) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4255) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4221) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4229) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4202) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6674) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6567) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6538) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6764) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176) at andr

viethoa commented 7 years ago

I see something wrong with your code: "java.lang.ClassCastException: kim.adapters.NuocUongAdapter cannot be cast to com.viethoa.RecyclerViewFastScroller$BubbleTextGetter"

Do you flowing exactly the document with 4 step?

dungockim commented 7 years ago

Yes, i do.

  1. build.gradle `dependencies { compile fileTree(dir: 'libs', include: ['*.jar'])

    testCompile 'junit:junit:4.12'

    compile 'com.android.support:appcompat-v7:24.2.0'

    compile 'com.android.support:recyclerview-v7:24.2.0'

    compile 'com.google.firebase:firebase-database:9.0.2'

    compile 'com.github.viethoa:fastscroller:1.2.0'

    compile 'com.android.support:cardview-v7:24.2.0'

}`

2.. activity_main.xml ` ... <LinearLayout

    android:layout_width="match_parent"

    android:layout_height="0dp"

    android:orientation="horizontal"
    android:layout_weight="80">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/listNuocUong"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="90"/>
    <com.viethoa.RecyclerViewFastScroller
        android:paddingLeft="2dp"
        android:layout_width="0dp"
        android:id="@+id/fast_scroller"
        android:layout_weight="10"
        android:layout_height="match_parent"
        />
</LinearLayout>

...`

3.. MainActiviy.java

`fastScroller.setRecyclerView(recyclerView);

        ArrayList<AlphabetItem> mAlphabetItems = new ArrayList<>();

        List<String> stAlphabet = new ArrayList<>();

        for (int i = 0; i < nuocUongList.size(); i++) {

            String name = nuocUongList.get(i).getTen();

            if (name == null || name.trim().isEmpty())

                continue;

            String word = name.substring(0, 1);

            if (!stAlphabet.contains(word)) {

                stAlphabet.add(word);

                mAlphabetItems.add(new AlphabetItem(i, word, false));

            }

        }
        fastScroller.setUpAlphabet(mAlphabetItems);

`

4.. implements method

`@Override

public String getTextToShowInBubble(int pos) {

    if(pos < 0 || pos >= nuocUongList.size())

        return null;

    String name = nuocUongList.get(pos).getTen();

    if(name == null || name.length() < 1)

        return null;

    return nuocUongList.get(pos).getTen().substring(0,1);

}`

i can't find the problem

viethoa commented 7 years ago

I think the problem is your Adapter, Can you show me all the code of NuocUongAdapter?

dungockim commented 7 years ago

this is my adapter:

`public class NuocUongAdapter extends RecyclerView.Adapter< NuocUongAdapter.MyViewHolder > { List< NuocUong > nuocUongList;

public NuocUongAdapter(List<NuocUong> nuocUongList){
    this.nuocUongList = nuocUongList;
}

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

@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
    DecimalFormat format = new DecimalFormat("###,###,###đ");
    NuocUong nuocUong = nuocUongList.get(position);
    holder.txtGia.setText(format.format(nuocUong.getGia()));
    holder.chkNuocUong.setText(nuocUong.getTen());
    holder.btnCong.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            holder.txtSoLuong.setText((Integer.parseInt(holder.txtSoLuong.getText().toString()) + 1)+"");
        }
    });

    holder.btnTru.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(Integer.parseInt(holder.txtSoLuong.getText().toString()) > 1)
                holder.txtSoLuong.setText((Integer.parseInt(holder.txtSoLuong.getText().toString()) - 1)+"");
        }
    });
}

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

public class MyViewHolder extends RecyclerView.ViewHolder{
    TextView txtGia,txtSoLuong;
    Button btnTru, btnCong;
    CheckBox chkNuocUong;
    public MyViewHolder(View itemView) {
        super(itemView);
        txtGia = (TextView) itemView.findViewById(R.id.txtGia);
        txtSoLuong = (TextView) itemView.findViewById(R.id.txtSoLuong);
        chkNuocUong = (CheckBox) itemView.findViewById(R.id.chkNuocUong);
        btnTru = (Button) itemView.findViewById(R.id.btnTru);
        btnCong = (Button) itemView.findViewById(R.id.btnCong);
    }
}

}`

viethoa commented 7 years ago

Can you set your Adapter extends RecyclerView.Adapter < NuocUongAdapter.MyViewHolder > and build again.

dungockim commented 7 years ago

Can you speak Vietnamese?

dungockim commented 7 years ago

Em có extends RecyclerView.Adapter < NuocUongAdapter.MyViewHolder > rồi mà post code lên nó ko hiển thị Anh ơi.

viethoa commented 7 years ago

okie, teamViewer ha. Gửi ID và password qua skype cho anh nhak: kustupid