Android如何在单击RecyclerView项目时从片段发送意图

Android如何在单击RecyclerView项目时从片段发送意图,android,android-intent,android-fragments,android-recyclerview,Android,Android Intent,Android Fragments,Android Recyclerview,我的应用程序使用包含在片段中的RecyclerView进行编码。我能够用模拟数据列表成功地填充RecyclerView,但是我不知道如何在单击其中一个项目时向另一个活动发送意图。当我试图从片段中调用StartActivity时,Android Studio无法解析该方法 MyonItemClick是通过我的viewholder类中的接口实现的。接口还生成一个错误内部类不能有静态声明。 我想知道我是否无法从片段中调用StartActivity,因为我的RecyclerView适配器或viewhol

我的应用程序使用包含在片段中的RecyclerView进行编码。我能够用模拟数据列表成功地填充RecyclerView,但是我不知道如何在单击其中一个项目时向另一个活动发送意图。当我试图从片段中调用
StartActivity
时,Android Studio无法解析该方法

My
onItemClick
是通过我的viewholder类中的接口实现的。接口还生成一个错误
内部类不能有静态声明
。
我想知道我是否无法从片段中调用
StartActivity
,因为我的RecyclerView适配器或viewholder类都没有扩展
Activity

单击RecyclerView中的项目时,发送意向的适当实现是什么

占位符片段

public static class PlaceholderFragment extends Fragment {

        Activity mActivity;
        RecyclerView mRecyclerView;
        TaskAdapter taskAdapter;

        public PlaceholderFragment() {
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            this.mActivity = (Activity) activity;
            setRetainInstance(true);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            mRecyclerView = (RecyclerView) rootView.findViewById(R.id.cardList);
            taskAdapter = new TaskAdapter(createList(30));
            return rootView;
        }

        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            mRecyclerView.setAdapter(taskAdapter);
            mRecyclerView.setHasFixedSize(true);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
            mRecyclerView.setItemAnimator(new DefaultItemAnimator());

            //Cannot resolve method 
            taskAdapter.SetItemClickListener(new TaskAdapter.TaskViewHolder.OnItemClickListener() {

                @Override
                public void onItemClick(View v, int position) {
                    Intent detailIntent = new Intent(v.getContext(), DetailActivity.class);
                    //Cannot resolve method 
                    StartActivity(detailIntent);

                }
            });

        }

        private List<Task> createList(int size) {
            List<Task> result = new ArrayList<>();
            for (int i = 1; i<=size; i++) {
                Task task = new Task();
                task.title = Task.TITLE_PREFIX + i;
                task.updated = Task.UPDATED_PREFIX +i;
                task.notes = task.NOTES_PREFIX + i;

                result.add(task);

            }
            return result;
        }
    }
public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.TaskViewHolder> {

    private List<Task> taskList;
    TaskViewHolder.OnItemClickListener mItemClickListener;

    public TaskAdapter(List<Task> taskList) {
        this.taskList = taskList;
    }

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

    @Override
    public void onBindViewHolder(TaskViewHolder taskViewHolder, int i) {
        Task task = taskList.get(i);
        taskViewHolder.mTitle.setText(task.title);
        taskViewHolder.mUpdated.setText(task.updated);
        taskViewHolder.mStatus.setChecked(false);
    }

    @Override
    public TaskViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

        View itemView = LayoutInflater.from(viewGroup.getContext()).
                inflate(R.layout.tasklist_layout, viewGroup, false);

        return new TaskViewHolder(itemView);
    }

    public class TaskViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        protected TextView mTitle;
        protected TextView mUpdated;
        protected CheckBox mStatus;

        public TaskViewHolder(View view) {
            super(view);
            mTitle = (TextView) view.findViewById(R.id.title);
            mUpdated = (TextView) view.findViewById(R.id.updated);
            mStatus = (CheckBox) view.findViewById(R.id.status);
            view.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            if (mItemClickListener != null) {
                mItemClickListener.onItemClick(v, getPosition());
            }
        }
        //Inner Classes cannot have static declarations
        public interface OnItemClickListener {
            void onItemClick(View view , int position);
        }

        public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
            //cannot resolve symbol 
            this.mItemClickListener = mItemClickListener;
        }
    }
}
公共静态类占位符片段扩展片段{
活动能力;
回收视图mRecyclerView;
任务适配器任务适配器;
公共占位符片段(){
}
@凌驾
公共事务主任(活动){
超级转速计(活动);
this.mActivity=(活动)活动;
setRetainInstance(真);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment_main,容器,错误);
mRecyclerView=(RecyclerView)rootView.findviewbyd(R.id.cardList);
taskAdapter=新的taskAdapter(createList(30));
返回rootView;
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
mRecyclerView.setAdapter(taskapter);
mRecyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getActivity());
setItemAnimator(新的DefaultItemAnimator());
//无法解析方法
taskAdapter.SetItemClickListener(新的taskAdapter.TaskViewHolder.OnItemClickListener(){
@凌驾
公共空间单击(视图v,内部位置){
Intent detailIntent=新的意图(v.getContext(),DetailActivity.class);
//无法解析方法
星触觉(意向);
}
});
}
私有列表createList(整数大小){
列表结果=新建ArrayList();
对于(inti=1;istartActivity()方法以小s开头。请尝试下面的代码行

   //Cannot resolve method 
        taskAdapter.TaskViewHolder.SetItemClickListener(new TaskAdapter.TaskViewHolder.OnItemClickListener() {

            @Override
            public void onItemClick(View v, int position) {
                Intent detailIntent = new Intent(v.getContext(), DetailActivity.class);
                //Cannot resolve method 
                getActivity().startActivity(detailIntent);

            }
        });
SetOnItemClickListener()应该在TaskViewHolder类之外。请尝试下面的方法,看看是否有帮助

public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.TaskViewHolder> {

private List<Task> taskList;
TaskViewHolder.OnItemClickListener mItemClickListener;

public TaskAdapter(List<Task> taskList) {
    this.taskList = taskList;
}

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

@Override
public void onBindViewHolder(TaskViewHolder taskViewHolder, int i) {
    Task task = taskList.get(i);
    taskViewHolder.mTitle.setText(task.title);
    taskViewHolder.mUpdated.setText(task.updated);
    taskViewHolder.mStatus.setChecked(false);
}

@Override
public TaskViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

    View itemView = LayoutInflater.from(viewGroup.getContext()).
            inflate(R.layout.tasklist_layout, viewGroup, false);

    return new TaskViewHolder(itemView);
}

public class TaskViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    protected TextView mTitle;
    protected TextView mUpdated;
    protected CheckBox mStatus;

    public TaskViewHolder(View view) {
        super(view);
        mTitle = (TextView) view.findViewById(R.id.title);
        mUpdated = (TextView) view.findViewById(R.id.updated);
        mStatus = (CheckBox) view.findViewById(R.id.status);
        view.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (mItemClickListener != null) {
            mItemClickListener.onItemClick(v, getPosition());
        }
    }
    //Inner Classes cannot have static declarations
    public interface OnItemClickListener {
        void onItemClick(View view , int position);
    }
}

 public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
        //cannot resolve symbol 
        this.mItemClickListener = mItemClickListener;
    }
}
公共类TaskAdapter扩展了RecyclerView.Adapter{
私人名单任务清单;
TaskViewHolder.OnItemClickListener mItemClickListener;
公用任务适配器(列表任务列表){
this.taskList=任务列表;
}
@凌驾
public int getItemCount(){
返回taskList.size();
}
@凌驾
BindViewHolder上的公共无效(TaskViewHolder TaskViewHolder,int i){
Task=taskList.get(i);
taskViewHolder.mTitle.setText(task.title);
taskViewHolder.mUpdated.setText(task.updated);
taskViewHolder.mStatus.setChecked(false);
}
@凌驾
公共任务ViewHolder onCreateViewHolder(视图组视图组,int i){
View itemView=LayoutInflater.from(viewGroup.getContext())。
充气(R.layout.tasklist\u布局,视图组,false);
返回新的TaskViewHolder(itemView);
}
公共类TaskViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
受保护的文本视图mTitle;
受保护的文本视图mUpdated;
受保护状态;
公共任务视图持有者(视图){
超级(视图);
mTitle=(TextView)view.findViewById(R.id.title);
mUpdated=(TextView)view.findViewById(R.id.updated);
mStatus=(复选框)view.findViewById(R.id.status);
view.setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
if(mItemClickListener!=null){
onItemClick(v,getPosition());
}
}
//内部类不能有静态声明
公共接口侦听器{
void onItemClick(视图,int位置);
}
}
公共void SetOnItemClickListener(最终OnItemClickListener mItemClickListener){
//无法解析符号
this.mItemClickListener=mItemClickListener;
}
}

解决了startActivity方法的特定问题,但是项目仍然没有生成,因为我的接口生成了错误
内部类不能有静态声明
。当我尝试调用
taskAdapter.SetItemClickListener
时,错误是
无法解析方法
,但是您创建的接口efined不是静态的。您发布了原始代码吗?SetOnItemClickListener方法在TaskViewHolder类中。将其放入TaskAdapter类中,该类解决除接口错误以外的所有问题。
内部类不能有静态声明。
。可能是因为我在静态片段中实现该方法?啊,因为无法在内部类中定义面。解决方案是将接口移动到适配器类中。“onCreateView”和您将
回收视图放在那里的
onViewCreated
之间有什么区别?