Android recyclerview适配器匿名arraylist错误
我有两个错误,你能帮我修复它们吗 这是主活动中的错误 这是密码Android recyclerview适配器匿名arraylist错误,android,android-adapter,android-recyclerview,Android,Android Adapter,Android Recyclerview,我有两个错误,你能帮我修复它们吗 这是主活动中的错误 这是密码 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recycler_view); //first recycler mRecyclerView = (RecyclerVi
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler_view);
//first recycler
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(
new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false));
OkHttpHandler handler = new OkHttpHandler( this, new OkHttpHandler.MyInterface() {
@Override
public void myMethod(ArrayList result) {
mAdapter = new MyAdapter(result,this);
mAdapter.notifyDataSetChanged();
mRecyclerView.setAdapter(mAdapter);
// GridViewAdapter adapter = new GridViewAdapter(getApplicationContext(), R.layout.grid_item_layout, result);
// adapter.notifyDataSetChanged();
// mGridView.setAdapter(adapter);
}
});
第二个错误在我的适配器中
// viewHolder.txtHeader.setText(...)
final Listitem item;
// final String name = mDataset.get(position);
item = mDataset.get(position);
viewHolder.txtHeader.setText(mDataset.get(position));
这是完整的代码
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<Listitem> mDataset;
Context mContext;
public class ImageViewHolder extends RecyclerView.ViewHolder {
//ImageView mImage;
public TextView txtHeader;
public TextView txtFooter;
public ImageViewHolder(View itemView) {
super (itemView);
txtHeader = (TextView) itemView.findViewById(R.id.firstLine);
txtFooter = (TextView) itemView.findViewById(R.id.secondLine);
}
}
public void add(int position, Listitem item) { //changed from string to listitem
mDataset.add(position, item);
notifyItemInserted(position);
}
public void remove(String item) {
int position = mDataset.indexOf(item);
mDataset.remove(position);
notifyItemRemoved(position);
}
// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(ArrayList<Listitem> myDataset, Context context) {
mDataset = myDataset;
mContext = context;
}
// Create new views (invoked by the layout manager)
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout, parent, false);
// set the view's size, margins, paddings and layout parameters
ImageViewHolder vh = new ImageViewHolder(v);
return vh;
}
private static final int TYPE_IMAGE = 1;
private static final int TYPE_GROUP = 2;
@Override
public int getItemViewType(int position) {
// here your custom logic to choose the view type
return position;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(RecyclerView.ViewHolder TextViewHolder, int position) {
ImageViewHolder viewHolder = (ImageViewHolder) TextViewHolder;
// viewHolder.txtHeader.setText(...)
final Listitem item;
// final String name = mDataset.get(position);
item = mDataset.get(position);
viewHolder.txtHeader.setText(mDataset.get(position));
/* viewHolder.txtFooter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
remove(item);
}
});*/
// viewHolder.txtFooter.setText("Footer: " + mDataset.get(position));
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.size();
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{
私有ArrayList数据集;
语境;
公共类ImageViewHolder扩展了RecyclerView.ViewHolder{
//图像视图模拟图像;
公共文本视图txtHeader;
公共文本视图txtFooter;
公共图像视图持有者(视图项视图){
超级(项目视图);
txtHeader=(TextView)itemView.findViewById(R.id.firstLine);
txtFooter=(TextView)itemView.findViewById(R.id.secondLine);
}
}
public void add(int位置,Listitem项){//从字符串更改为Listitem
mDataset.add(位置、项目);
(位置);
}
公共无效删除(字符串项){
int position=mDataset.indexOf(项目);
mDataset.remove(位置);
已移除(位置)的项目;
}
//提供合适的构造函数(取决于数据集的类型)
公共MyAdapter(ArrayList myDataset,上下文){
mDataset=myDataset;
mContext=上下文;
}
//创建新视图(由布局管理器调用)
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,
int视图类型){
//创建新视图
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.rowlayout,parent,false);
//设置视图的大小、边距、填充和布局参数
ImageViewHolder vh=新的ImageViewHolder(v);
返回vh;
}
私有静态最终整数类型_IMAGE=1;
私有静态最终int TYPE_GROUP=2;
@凌驾
public int getItemViewType(int位置){
//这里是选择视图类型的自定义逻辑
返回位置;
}
//替换视图的内容(由布局管理器调用)
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder文本ViewHolder,int位置){
ImageViewHolder viewHolder=(ImageViewHolder)TextViewHolder;
//viewHolder.txtHeader.setText(…)
最后清单项目;
//最终字符串名称=mDataset.get(位置);
item=mDataset.get(位置);
viewHolder.txtHeader.setText(mDataset.get(position));
/*viewHolder.txtFooter.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
删除(项目);
}
});*/
//viewHolder.txtFooter.setText(“页脚:+mDataset.get(position));
}
//返回数据集的大小(由布局管理器调用)
@凌驾
public int getItemCount(){
返回mDataset.size();
}
}
列表项
public class Listitem implements Parcelable {
String id;
//String name;
String url;
Listitem (Parcel in){
this.id = in.readString();
// this.name = in.readString();
this.url = in.readString();
}
Listitem( String name,String url) {
this.id = id;
this.url = url;
}
@Override
public int describeContents() {
return 0;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.id);
// dest.writeString(this.name);
dest.writeString(this.url);
}
public static final Parcelable.Creator<Listitem> CREATOR = new Parcelable.Creator<Listitem>() {
public Listitem createFromParcel(Parcel in) {
return new Listitem(in);
}
public Listitem[] newArray(int size) {
return new Listitem[size];
}
};
}
public类Listitem实现可包裹{
字符串id;
//字符串名;
字符串url;
Listitem(中的包裹){
this.id=in.readString();
//this.name=in.readString();
this.url=in.readString();
}
Listitem(字符串名称、字符串url){
this.id=id;
this.url=url;
}
@凌驾
公共int描述内容(){
返回0;
}
公共void setUrl(字符串url){
this.url=url;
}
公共字符串getUrl(){
返回url;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getId(){
返回id;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
dest.writeString(此.id);
//目的地记录(此名称);
dest.writeString(this.url);
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
公共列表项createFromParcel(地块中){
返回新的列表项(在中);
}
公共列表项[]新数组(整数大小){
返回新的Listitem[大小];
}
};
}
对于第一个错误:
您需要在适配器构造函数中传递一个上下文
实际上这个内部myMethod(arraylistresult)
指的是OkHttpHandler.MyInterface
而不是上下文
要解决此问题,请更改mAdapter=newmyadapter(结果为this)代码>
tomAdapter=newmyadapter(结果,YourActivityName.this)代码>
对于第二个错误:
mDataset.get(position)
正在返回一个Listitem
对象,而您需要一个CharSequence
(或String
)对象作为setText()
方法的参数
你应该这样做
viewHolder.txtHeader.setText(mDataset.get(position.getUrl())代码>
或
viewHolder.txtHeader.setText(mDataset.get(position.getId())第一个错误的代码:
您需要在适配器构造函数中传递一个上下文
实际上这个内部myMethod(arraylistresult)
指的是OkHttpHandler.MyInterface
而不是上下文
要解决此问题,请更改mAdapter=newmyadapter(结果为this)代码>
tomAdapter=newmyadapter(结果,YourActivityName.this)代码>
对于第二个错误:
mDataset.get(position)
正在返回一个Listitem
对象,而您需要一个CharSequence
(或String
)对象作为setText()
方法的参数
你应该这样做
viewHolder.txtHeader.setText(mDataset.get(position.getUrl())代码>
或
viewHolder.txtHeader.setText(mDataset.get(position.getId())代码>有什么问题