0

在实现 OnEditTask 接口的 TaskListActivity 类中重写了 editTask 方法。
为什么我们使用上下文并将其转换为 OnEditTask 接口?
我在这里缺少什么接口或java原理?

这是“傻瓜的Android应用程序开发”一书中的代码。

RecyclerView 适配器
1]

完整的 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;
}

}

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

1

在实现 OnEditTask 接口的 TaskListActivity 类中重写了 editTask 方法

这就解释了为什么它需要演员表。否则您不能调用该方法

它可能是事先投射的,就像在这条线上

final Context context = viewHolder.titleView.getContext();

本来可以

final OnEditTask onEditTask = (OnEditTask) viewHolder.titleView.getContext();

但其他地方需要上下文变量(毕加索)

Picasso.with(context)
       .load(getImageUrlForTask(position))
       .into(viewHolder.imageView);
于 2016-08-31T15:47:20.247 回答