在实现 OnEditTask 接口的 TaskListActivity 类中重写了 editTask 方法。
为什么我们使用上下文并将其转换为 OnEditTask 接口?
我在这里缺少什么接口或java原理?
这是“傻瓜的Android应用程序开发”一书中的代码。
RecyclerView 适配器
完整的 RecyclerView 适配器代码
package com.example.manis.tasks.adapter;
import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.manis.tasks.activity.R;
import com.example.manis.tasks.interfaces.OnEditTask;
import com.squareup.picasso.Picasso;
public class TaskListAdapter extends RecyclerView.Adapter<TaskListAdapter.ViewHolder>
{
static String[] fakeData = new String[]
{
"One","Two","Three","Four","Five","Ah....ah..ah"
};
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
CardView v = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.card_task, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position)
{
final Context context = viewHolder.titleView.getContext();
viewHolder.titleView.setText(fakeData[position]);
Log.v("myTag",fakeData[position].toString());
Picasso.with(context)
.load(getImageUrlForTask(position))
.into(viewHolder.imageView);
viewHolder.cardView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
((OnEditTask)context).editTask(position);
}
});
}
@Override
public int getItemCount()
{
return fakeData.length;
}
static class ViewHolder extends RecyclerView.ViewHolder
{
CardView cardView;
TextView titleView;
ImageView imageView;
public ViewHolder(CardView card)
{
super(card);
cardView=card;
titleView = (TextView) card.findViewById(R.id.text1);
imageView = (ImageView) card.findViewById(R.id.image);
}
}
public static String getImageUrlForTask(long taskId){
return "http://lorempixel.com/600/400/cats/?fakeId=" + taskId;
}
}