【问题标题】:Load next item of reyclerview when user clicks on next button, having error in this当用户单击下一个按钮时加载下一个 recyclerview 项目,在此有错误
【发布时间】:2020-06-25 12:45:39
【问题描述】:

我正在制作一个 Android 应用程序,其中每当用户单击 recyclerview 项目时我都有 reyclerview,然后他正在导航到下一个活动,并且将显示下一个活动数据。它正在工作,但现在我在其中添加下一个和上一个按钮。每当单击下一个按钮时,应显示下一个 reycler 项目的数据,并且与上一个按钮相同。

但是我在这方面遇到了错误。这是我的代码。

回收器适配器:

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

ArrayList<ContentModel>contentModels;
Context context;

public ContentViewRecyclerAdapter(ArrayList<ContentModel> contentModels, Context context) {
    this.contentModels = contentModels;
    this.context = context;
}

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

@Override
public void onBindViewHolder(@NonNull ContentViewRecyclerAdapter.ViewHolder holder, final int position) {
    holder.textView.setText(contentModels.get(position).getContent());
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, ContentViewActivity.class);
            i.putExtra("valuecontent", contentModels.get(position).getContent());
            i.putExtra("position", position);
            i.putParcelableArrayListExtra("contentmodels", contentModels);
            context.startActivity(i);
        }
    });

}

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

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView textView;
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        textView = itemView.findViewById(R.id.contentText);
    }
}

}

模型类:

public class ContentModel implements Parcelable {
String content;

public ContentModel(String content) {
    this.content = content;
}

protected ContentModel(Parcel in) {
    content = in.readString();
}

public static final Creator<ContentModel> CREATOR = new Creator<ContentModel>() {
    @Override
    public ContentModel createFromParcel(Parcel in) {
        return new ContentModel(in);
    }

    @Override
    public ContentModel[] newArray(int size) {
        return new ContentModel[size];
    }
};

public String getContent() {
    return content;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(content);
}

}

内容视图活动:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_content_view);
    MobileAds.initialize(this, new OnInitializationCompleteListener() {
        @Override
        public void onInitializationComplete(InitializationStatus initializationStatus) {
        }
    });
    mAdView = findViewById(R.id.adView_content);
    next = findViewById(R.id.next);
    prev = findViewById(R.id.prev);
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
    textView = findViewById(R.id.textView);
    imageView = findViewById(R.id.backbtncntent);
    sharebtn = findViewById(R.id.sharebtn);
    copybtn = findViewById(R.id.copy);
    contentModels = new ArrayList<>();
    contentModels.clear();
    contentModels = getIntent().getParcelableArrayListExtra("contentmodels");
    final String valuecontent = getIntent().getStringExtra("valuecontent");
    position = getIntent().getIntExtra("position",0);
    textView.setText((Integer) contentModels.get(position));
    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(ContentViewActivity.this, HomeActivity.class);
            startActivity(i);
        }
    });
    sharebtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(android.content.Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Hey Read Some Interesting Content");
            intent.putExtra(android.content.Intent.EXTRA_TEXT, valuecontent);
            startActivity(Intent.createChooser(intent, "Share Via"));
        }
    });
    copybtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setClipboard(ContentViewActivity.this,textView.getText().toString());
        }
    });
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            position =(position+1)%contentModels.size();
            textView.setText((Integer) contentModels.get(position));
        }
    });
    prev.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            position =(position-1)%contentModels.size();
            textView.setText((Integer) contentModels.get(position));
        }
    });
}
private void setClipboard(Context context, String text) {
    if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
        android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
        clipboard.setText(text);
    } else {
        android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
        android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text);
        Toast.makeText(ContentViewActivity.this, "Copied to Clipboard", Toast.LENGTH_SHORT).show();
        clipboard.setPrimaryClip(clip);
    }
}

}

我得到的错误:

   Caused by: java.lang.ClassCastException: example.example1.shayariapp.Models.ContentModel cannot be cast to java.lang.Integer
    at example.example1.shayariapp.Acitivties.ContentViewActivity.onCreate(ContentViewActivity.java:54)
    at android.app.Activity.performCreate(Activity.java:7227)
    at android.app.Activity.performCreate(Activity.java:7218)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2941)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3066) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:202) 
    at android.app.ActivityThread.main(ActivityThread.java:6962) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:528) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:888) 

请帮我解决这个问题。请

【问题讨论】:

    标签: java android xml android-recyclerview


    【解决方案1】:

    它位于这里:

    textView.setText((Integer) contentModels.get(position));

    您正在尝试将 ContentModel 项目解析为 Integer

    你这样做了 3 次。在onCreate() 内部和ClickListeners 内部用于nextprev

    【讨论】:

    • 我应该写什么?请告诉我正确的代码。我想根据位置将文本从 contentmodels 设置为 textview。
    • 我不知道你想在那里显示什么。您的班级唯一拥有的字段是String content,因此如果您想在TextView 中显示它,您可以使用textView.setText( contentModels.get(position).getContent());。无需解析任何内容。
    • 我想显示文本....但是无法从 Activity 访问 contentModels.get(position).getContent()。
    • 您的onCreate() 中有contentModels = new ArrayList&lt;&gt;(); contentModels.clear();,所以它就在那里,而getContent() 是公开的,那么问题出在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2014-02-04
    • 2021-06-12
    • 1970-01-01
    相关资源
    最近更新 更多