我像这样在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时创建,启动这些代码并转移到另一个活动。如何使用这些代码?
对不起,我不会说英语。
答案 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 强>
在这里你必须做逻辑,绑定视图,点击动作