Android 如何处理RecycleServiceWholder中的点击

Android 如何处理RecycleServiceWholder中的点击,android,android-recyclerview,Android,Android Recyclerview,我是android新手,下面是我的RecyclerAdapter类,它扩展了RecyclerView。我试图在我的RecycleServiceWholder中设置onClicklistener,但我未能调用新的活动,因为我似乎不知道如何从适配器获取上下文引用。任何帮助都将不胜感激 public class TabFragmentNews extends Fragment { private static final String ARG_EXAMPLE = "this_is_a_constant

我是android新手,下面是我的
RecyclerAdapter
类,它扩展了
RecyclerView
。我试图在我的
RecycleServiceWholder
中设置
onClicklistener
,但我未能调用新的活动,因为我似乎不知道如何从适配器获取上下文引用。任何帮助都将不胜感激

public class TabFragmentNews extends Fragment {
private static final String ARG_EXAMPLE = "this_is_a_constant";
private String example_data;
private RecyclerView recyclerView;
ProgressBar progressBar;


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_news, container, false);

    progressBar = (ProgressBar) view.findViewById(R.id.progressBarNews);
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview_news);
    //Executing The Async Task Class Here
    newsupdate();
    return view;
}

//Method For Executing The Async Task
public void newsupdate() {
    new BackgroundTask(getActivity()).execute();
}

//Checking for internet/network connection here


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    example_data = getArguments().getString(ARG_EXAMPLE);
    Log.i("Fragment created with ", example_data);
}

public static TabFragmentNews newInstance(String example_argmument) {
    TabFragmentNews tabFragmentNews = new TabFragmentNews();
    Bundle args = new Bundle();
    args.putString(ARG_EXAMPLE, example_argmument);
    tabFragmentNews.setArguments(args);
    return tabFragmentNews;
}

//AsynTask Class for Downloading News Information
class BackgroundTask extends AsyncTask<Void, News, Void> {

    Context ctx;
    Activity activity;
    RecyclerView.Adapter adapter;
    RecyclerView.LayoutManager layoutManager;
    ProgressDialog progressDialog;
    ArrayList<News> arrayList = new ArrayList<>();

    public BackgroundTask(Context ctx) {
        this.ctx = ctx;
        activity = (Activity) ctx;
    }

    String json_string = "http://doubleclickug.com/app/newtest.php";

    @Override
    protected void onPreExecute() {
        layoutManager = new LinearLayoutManager(ctx);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        adapter = new RecyclerAdapter(getContext(),arrayList);
        recyclerView.setAdapter(adapter);

        progressBar.setVisibility(View.VISIBLE);

    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            URL url = new URL(json_string);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder stringBuilder = new StringBuilder();
            String line;

            while ((line = bufferedReader.readLine()) != null) {
                stringBuilder.append(line + "\n");
            }
            httpURLConnection.disconnect();
            String json_string = stringBuilder.toString().trim();
            JSONObject jsonObject = new JSONObject(json_string);
            JSONArray jsonArray = jsonObject.getJSONArray("server_response");
            int count = 0;
            while (count < jsonArray.length()) {
                JSONObject JO = jsonArray.getJSONObject(count);
                count++;
                News news = new News(JO.getString("details"));
                publishProgress(news);
                //Thread.sleep(100);
            }

            Log.d("JSON STRING", json_string);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
            //} catch (InterruptedException e) {
            // e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(News... values) {
        arrayList.add(values[0]);
        adapter.notifyDataSetChanged();
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        //progressDialog.dismiss();
        progressBar.setVisibility(View.GONE);

    }
}

//RecyclerAdapter Class for populating recycler view with Information
class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {

    ArrayList<News> arrayList = new ArrayList<>();

    public static final int TYPE_HEAD = 0;
    public static final int TYPE_LIST = 1;
    Context context;

    public RecyclerAdapter(Context context,ArrayList<News> arrayList) {
        this.arrayList = arrayList;
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_HEAD) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_header, parent, false);
            RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view, viewType);
            return recyclerViewHolder;
        } else if (viewType == TYPE_LIST) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_row_layout, parent, false);
            RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view, viewType);
            return recyclerViewHolder;
        }
        return null;
    }

    @Override
    public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {

        if (holder.viewType == TYPE_LIST) {
            final News news = arrayList.get(position - 1);
            holder.Details.setText(news.getDetails());
        }
    }

    @Override
    public int getItemCount() {
        return arrayList.size() + 1;
    }

    //RecyclerView Holder Class
    class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView Details;
        int viewType;

        public RecyclerViewHolder(View view, int viewType) {
            super(view);
            view.setOnClickListener(this);
            if (viewType == TYPE_LIST) {
                Details = (TextView) itemView.findViewById(R.id.team);
                this.viewType = TYPE_LIST;
            } else if (viewType == TYPE_HEAD) {
                this.viewType = TYPE_HEAD;
            }

        }

        //handling Clicks of news elements here
        @Override
        public void onClick(View v) {

            //How Do I Call an Activity???
            context.startActivity(new Intent(context,NewsActivity.class));

        }


    }

    @Override
    public int getItemViewType(int position) {
        if (position == 0)
            return TYPE_HEAD;
        return TYPE_LIST;
    }

}
公共类TabFragmentNews扩展了片段{
private static final String ARG_EXAMPLE=“this_是一个_常量”;
私有字符串示例_数据;
私人回收站;
ProgressBar ProgressBar;
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u news,container,false);
progressBar=(progressBar)view.findViewById(R.id.progressBarNews);
recyclerView=(recyclerView)view.findviewbyd(R.id.recyclerView\u news);
//在这里执行异步任务类
新闻更新();
返回视图;
}
//用于执行异步任务的方法
公共无效新闻更新(){
新建背景任务(getActivity()).execute();
}
//在此处检查internet/网络连接
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
示例_data=getArguments().getString(ARG_示例);
Log.i(“使用创建的片段”,示例_数据);
}
公共静态选项卡FragmentNews newInstance(字符串示例参数){
TabFragmentNews TabFragmentNews=新TabFragmentNews();
Bundle args=新Bundle();
putString(ARG_示例,EXAMPLE_参数);
tabFragmentNews.setArguments(args);
返回碎片新闻;
}
//用于下载新闻信息的AsynTask类
类BackgroundTask扩展了AsyncTask{
上下文ctx;
活动;
RecyclerView.适配器;
RecyclerView.LayoutManager LayoutManager;
进行对话进行对话;
ArrayList ArrayList=新的ArrayList();
公共背景任务(上下文ctx){
this.ctx=ctx;
活动=(活动)ctx;
}
字符串json_字符串=”http://doubleclickug.com/app/newtest.php";
@凌驾
受保护的void onPreExecute(){
layoutManager=新的LinearLayoutManager(ctx);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
适配器=新的RecyclerAdapter(getContext(),arrayList);
recyclerView.setAdapter(适配器);
progressBar.setVisibility(View.VISIBLE);
}
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
URL=新URL(json_字符串);
HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
InputStream InputStream=httpURLConnection.getInputStream();
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream));
StringBuilder StringBuilder=新的StringBuilder();
弦线;
而((line=bufferedReader.readLine())!=null){
stringBuilder.append(行+“\n”);
}
httpURLConnection.disconnect();
String json_String=stringBuilder.toString().trim();
JSONObject JSONObject=新的JSONObject(json_字符串);
JSONArray JSONArray=jsonObject.getJSONArray(“服务器响应”);
整数计数=0;
while(countclass RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {

ArrayList<News> arrayList = new ArrayList<>();
Context context;

public static final int TYPE_HEAD = 0;
public static final int TYPE_LIST = 1;

public RecyclerAdapter(Context context, ArrayList<News> arrayList) {
    this.arrayList = arrayList;
    this.context = context;
}
.....
.....


//RecyclerView Holder Class
class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView Details;
int viewType;

public RecyclerViewHolder(View view, int viewType) {
    super(view);
    view.setOnClickListener(this);
    if (viewType == TYPE_LIST) {
        Details = (TextView) itemView.findViewById(R.id.team);
        this.viewType = TYPE_LIST;
    } else if (viewType == TYPE_HEAD) {
        this.viewType = TYPE_HEAD;
    }

}

//handling Clicks of news elements here
@Override
public void onClick(View v) {
    context.startActivity(new Intent(context,ActivityTwo.class));


   }
}
RecyclerAdapter adapter = new RecyclerAdapter(this,mArrayList);
Intent intent = new Intent(context, YourActivityToStart.class);
startActivity(intent);
public RecyclerAdapter(Context context,ArrayList<News> arrayList) {
    this.arrayList = arrayList;
}
public RecyclerAdapter(Context context,ArrayList<News> arrayList) {
    this.arrayList = arrayList;
    this.context  = context;
}
adapter = new RecyclerAdapter(getContext(),arrayList);
adapter = new RecyclerAdapter(getActivity(),arrayList);
  class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {

    ArrayList<News> arrayList = new ArrayList<>();

    public static final int TYPE_HEAD = 0;
    public static final int TYPE_LIST = 1;
    Context context;
    public RecyclerAdapter(Context context,ArrayList<News> arrayList) {
        this.arrayList = arrayList;
this.context = context;
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_HEAD) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_header, parent, false);
            RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view, viewType);
            return recyclerViewHolder;
        } else if (viewType == TYPE_LIST) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_row_layout, parent, false);
            RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view, viewType);
            return recyclerViewHolder;
        }
        return null;
    }

    @Override
    public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {

        if (holder.viewType == TYPE_LIST) {
            News news = arrayList.get(position - 1);
            holder.Details.setText(news.getDetails());
            holder.itemView.setOnClickListener(new Listener(news));
             holder.Details.setOnClickListener(new Listener(news));
        }
    }

    @Override
    public int getItemCount() {
        return arrayList.size() + 1;
    }


    class Listener  implements View.OnClickListener
    {
    News news;
    Listener(News news)

    {
    this.news = news;
    }
     //handling Clicks of news elements here
        @Override
        public void onClick(View v) {

            //how do I call a new Activity???
    Intent intent = new Intent(context, YourActivityToStart.class);
context.startActivity(intent);
        }
    }

    //RecyclerView Holder Class
    class RecyclerViewHolder extends RecyclerView.ViewHolder {
        TextView Details;
        int viewType;
    View itemView;
        public RecyclerViewHolder(View view, int viewType) {
            super(view);
           this.itemView =view;
            if (viewType == TYPE_LIST) {
                Details = (TextView) itemView.findViewById(R.id.team);
                this.viewType = TYPE_LIST;
            } else if (viewType == TYPE_HEAD) {
                this.viewType = TYPE_HEAD;
            }

        }




    }

    @Override
    public int getItemViewType(int position) {
        if (position == 0)
            return TYPE_HEAD;
        return TYPE_LIST;
    }
private CustomItemsClickListener mCardViewClickListener;

public interface CustomItemsClickListener {

    public void onCardViewItemClicked(View itemView, int position);
public CustomRecyclerViewAdapter(ArrayList<SomedataForYourItems> dataForItemsList,                                        CustomItemsClickListener mCardViewClickListener){

    this.mCardViewClickListener = mCardViewClickListener;
    this.dataForItemsList= dataForItemsList;
}
public class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    public TextView tv1;
    public Button btnCustom1, btnCustom2;
    public CardView container;

    public CustomOrdersViewHolder(View view) {
        super(view);

        container = (CardView) view.findViewById(R.id.item_view);
        tv1= (TextView) view.findViewById(R.id.tv1);
        btnCustom1= (Button) view.findViewById(R.id.btnCustom1);
        btnCustom2= (Button) view.findViewById(R.id.btnCustom1);

        btnCustom1.setOnClickListener(this);
        btnCustom2.setOnClickListener(this);
   }

    @Override
    public void onClick(View cardViewitems) {
     mCardViewClickListener.onCardViewItemClicked(cardViewitems, getAdapterPosition());
    }
}
mAdapter = new CustomRecyclerViewAdapter(getYourArrayListData(),
            new CustomRecyclerViewAdapter.CustomItemsClickListener () {
                @Override
                public void onCardViewItemClicked(View view, int position) {

                    //TODO cardview click
                    switch (view.getId()) {

                        case R.id.btnCustom1:
                            // TODO some actions for btn1
                            break;

                        case R.id.btnCustom2:
                            // TODO some actions for btn2
                            break;

                    }
                }
            });
    mYRecyclerView.setAdapter(mAdapter);