我可以在onCreateViewHolder中使用startActivity吗?

时间:2017-09-22 06:09:12

标签: android android-recyclerview recycler-adapter

我像这样在recyclerView onCreateViewHolder中创建一个onClick。

@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_homeinfo, parent, false);
        final ViewHolder holder = new ViewHolder(itemView);

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(), Integer.toString(holder.getAdapterPosition()), Toast.LENGTH_SHORT).show();
            }
        });
        return holder;
    }

我希望将此代码放在onClick上。

final String serverURL = "http://youngh.cafe24app.com/qrock/views/qrock_pk/user_email";

                myDb = new DatabaseHelper(v.getContext());  //is it Possible?
                final String token = myDb.getToken();
                final String email = myDb.getEmail();

                StringRequest stringRequest = new StringRequest(Request.Method.GET, serverURL,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                Intent myIntent = new Intent(v.getContext(), mainActivity.class);   //v.getContent() <- ERROR
                                startActivity(myIntent);
                                finish();

                                overridePendingTransition(R.xml.madefadein, R.xml.splashfadeout);
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        switch(error.networkResponse.statusCode)
                        {

                        }
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map<String, String> params = new HashMap<String, String>();
                        //params.put("qrock_pk", qrockPk);
                        params.put("user_email", email);
                        return params;
                    }

                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        Map<String, String> headers = new HashMap<>();
                        headers.put("x-access-token", token);
                        return headers;
                    }
                };
                MySingleton.getInstance(v.getContext()).addToRequestQue(stringRequest);

但在onCreateViewHolder中,我无法投射startActivity()finish()等。 我想在点击recyclerViewItem时创建,启动这些代码并转移到另一个活动。如何使用这些代码?

对不起,我不会说英语。

7 个答案:

答案 0 :(得分:2)

试试这个:

onCreateViewHolder

context = v.getContext()

然后继续使用context.startActivity()((Activity)context).finish();

答案 1 :(得分:0)

试试此代码

Intent myIntent= new Intent(v.getContext(), mainActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
v.getContext().startActivity(myIntent);
finish();

答案 2 :(得分:0)

你可以这样使用;

Intent myIntent = new Intent(getApplicationContext(), mainActivity.class);
getApplicationContext().startActivity(myIntent);

答案 3 :(得分:0)

而不是onCreateViewHolder执行点击功能onBindViewHolder。原因是每次在创建视图时调用add onBindViewHolder时都会调用onCreateViewHolder

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //use holder.itemView.getContext() to get context
            Toast.makeText( holder.itemView.getContext().getContext(), Integer.toString(holder.getAdapterPosition()), Toast.LENGTH_SHORT).show();
        }
    });

答案 4 :(得分:0)

你可以这样使用((Activity)ctx).startActivity();

答案 5 :(得分:0)

您只需将getContext()更改为view.getContext();

 @Override
        public void onClick(View view) {
           view.getContext().startActivity(new Intent(view.getContext(), MainActivity.class));    
        }

答案 6 :(得分:0)

<强> 1。 onCreateViewHolder

在这里你必须创建/初始化你的观点

<强> 2。 onBindViewHolder

在这里你必须做逻辑,绑定视图,点击动作