Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “无法解决”;startActivity();当试图从RecyclerView';s onClickListener()_Java_Android - Fatal编程技术网

Java “无法解决”;startActivity();当试图从RecyclerView';s onClickListener()

Java “无法解决”;startActivity();当试图从RecyclerView';s onClickListener(),java,android,Java,Android,我是android编程新手,正在尝试实现RecyclerView。如果这个问题是多余的,请原谅,但我在其他地方找不到我的答案。所以,我终于发布了我的问题 import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; i

我是android编程新手,正在尝试实现RecyclerView。如果这个问题是多余的,请原谅,但我在其他地方找不到我的答案。所以,我终于发布了我的问题

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

public class QueriesAdapter extends         RecyclerView.Adapter<QueriesAdapter.QueryViewHolder> {
    private List<Query> list;
    private Context mContext;

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public class QueryViewHolder extends RecyclerView.ViewHolder{
        // each data item is just a string in this case
        protected TextView questionTextView;

        public QueryViewHolder (View view)
        {
            super(view);
            this.questionTextView = (TextView)   view.findViewById(R.id.list_item_question);

        }

    }


    // Provide a suitable constructor (depends on the kind of dataset)
    public QueriesAdapter(Context context, List<Query> myDataset) {
        mContext = context;
        list = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public QueriesAdapter.QueryViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.list_item, parent, false);
        // set the view's size, margins, paddings and layout parameters
        QueryViewHolder vh = new QueryViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(QueryViewHolder holder, int position)      {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.questionTextView.setText(list.get(position).mQuery);
        holder.questionTextView.setTag(holder);

    }

    View.OnClickListener clickListener = new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            QueryViewHolder viewHolder = (QueryViewHolder)v.getTag();
            int position = viewHolder.getPosition();
            Query q = list.get(position);

            Intent i = new Intent(mContext, Answer.class);
            i.putExtra("QueryId", q.id);
            i.putExtra("question", q.mQuery);
            i.putExtra("answer", q.mAnswer);

            startActivity(i);
//This line is showing error that it cannot resolve startActivity() function, I think that I did not pass the context properly. 
//Anyway, help me on this.

        }
    };

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return list.size();
    }
}

使用
mContext.startActivity(i)

您必须使用mContext启动一个方法,该方法在活动中是默认的,请尝试使用
mContext.startActivity(i)

您需要以以下方式实现。在
RecyclerView
适配器类中定义一个单击侦听器,以便事件可以在相应的
活动中使用
片段
。这有助于使事件更容易处理

public class ListViewNotifyAdapter extends RecyclerView.Adapter <...>{

//defining a click listner
private static MyClickListener myClickListener;
//usual methods and variables goes here

public void setOnItemClickListener(MyClickListener myClickListener) {
        this.myClickListener = myClickListener;
    }
//interface for click 
public interface MyClickListener {
        public void onItemClick(int position, View v);
    }
//view holder
public static class NotificationObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        TextView txtEventAlias;
        TextView txtTime;
        TextView txtLogMessage;
        public NotificationObjectHolder(View viewItem){
            super(viewItem);
            txtEventAlias=(TextView)viewItem.findViewById(R.id.txtEventAlias);
            txtTime=(TextView)viewItem.findViewById(R.id.txtTime);
            txtLogMessage=(TextView)viewItem.findViewById(R.id.txtLogMessage);
            itemView.setOnClickListener(this);
        }
        @Override
        public void onClick(View v) {
            myClickListener.onItemClick(getPosition(), v);
        }
}
}

试着用mContext调用startActivity,就像调用
mContext一样。startActivity(i)
谢谢你,它成功了。但是你能告诉我为什么它不起作用吗before@HarshitKumarstartActivity是上下文的一种方法。活动扩展了上下文。
public class ListViewNotifyAdapter extends RecyclerView.Adapter <...>{

//defining a click listner
private static MyClickListener myClickListener;
//usual methods and variables goes here

public void setOnItemClickListener(MyClickListener myClickListener) {
        this.myClickListener = myClickListener;
    }
//interface for click 
public interface MyClickListener {
        public void onItemClick(int position, View v);
    }
//view holder
public static class NotificationObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        TextView txtEventAlias;
        TextView txtTime;
        TextView txtLogMessage;
        public NotificationObjectHolder(View viewItem){
            super(viewItem);
            txtEventAlias=(TextView)viewItem.findViewById(R.id.txtEventAlias);
            txtTime=(TextView)viewItem.findViewById(R.id.txtTime);
            txtLogMessage=(TextView)viewItem.findViewById(R.id.txtLogMessage);
            itemView.setOnClickListener(this);
        }
        @Override
        public void onClick(View v) {
            myClickListener.onItemClick(getPosition(), v);
        }
}
}
@Override
    public void onResume() {
        super.onResume();
        ((ListViewNotifyAdapter) mAdapter).setOnItemClickListener(
                new ListViewNotifyAdapter.MyClickListener() {
                    @Override
                    public void onItemClick(int position, View v) {

                        showAlert(position);
                    }
                });
    }
  void showAlert(int position){
      //action for the item click
   }