[英]get data from onclick
First, my problem is exactly similar to this , but I still cant solve my problem. 首先,我的问题与此完全相似,但是我仍然无法解决我的问题。
public class PlacesAdapter extends RecyclerView.Adapter<PlacesAdapter.ViewHolder> {
private static final String TAG = "PlaceAdapter";
List<PlaceSaved> items;
PlaceDatabase db;
public PlacesAdapter(List<PlaceSaved> items, PlaceDatabase db) {
this.items = items;
this.db = db;
}
@Override
public PlacesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.places_list_item,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final PlacesAdapter.ViewHolder holder, final int position) {
holder.name.setText(items.get(position).getTitle());
holder.time.setText(items.get(position).getTime());
holder.longi.setText(items.get(position).getLongi());
holder.delbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
// removeItem(items.get(holder.getAdapterPosition()));
AsyncTask.execute(new Runnable() {
@Override
public void run() {
AsyncTask.execute(new Runnable() {
@Override
public void run() {
db.databaseInterface().delete(items.get(position));
Snackbar.make(view , items.get(position).getTime()+" deleted, will be updated next time!", Snackbar.LENGTH_LONG).show();
}
});
}
});
}
});
holder.cview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("CardView", "Clicked "+items.get(position).getTitle()+", "+items.get(position).getLongi());
Location Saved_Location_onCard = new Location("");
Saved_Location_onCard.setLatitude(Double.parseDouble(items.get(position).getTitle()));
Saved_Location_onCard.setLatitude(Double.parseDouble(items.get(position).getLongi()));
latlang.Lat = (Double.parseDouble(items.get(position).getTitle()));
latlang.Lang = (Double.parseDouble(items.get(position).getLongi()));
Snackbar.make(view, "The new location is "+
items.get(position).getTitle()+", "+items.get(position).getLongi(),
Snackbar.LENGTH_LONG).show();
// Intent intent = new Intent(, SunFragment.class)
SecondFragment sf = new SecondFragment();
sf.updateLocationUI();
// sf.showMap();
}
});
}
After realising that onclick is not a good idea inside onBindViewHolder
, I am trying to move it to ViewHolder
as: 意识到onclick在
onBindViewHolder
内部不是一个好主意onBindViewHolder
,我尝试将其移动为ViewHolder
如下所示:
public class ViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener{
public TextView name;
public TextView time;
public TextView longi;
public ImageButton delbutton;
public CardView cview;
public ViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.secondLine);
time= itemView.findViewById(R.id.firstLine);
longi = itemView.findViewById(R.id.longitude);
delbutton = itemView.findViewById(R.id.delicon);
cview = itemView.findViewById(R.id.place_view);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view){
//Snackbar.make(this,"Hi", Snackbar.LENGTH_LONG).show();
Log.e("onClick", "Hello"+getLayoutPosition());
}
}
So, I am abel to get the layout's position, but not the values stored in the card, as I was able to do when I defined it inside BindView. 因此,我很想得到布局的位置,而不是要获取存储在卡中的值,就像我在BindView中定义布局时所做的那样。
How I can do that? 我该怎么做?
Also, any idea how to delete and update the delete function? 另外,任何想法如何删除和更新删除功能?
Get the position with getAdapterPosition()
. 使用
getAdapterPosition()
获取位置。
@Override
public void onClick(View view){
// Clicked postion
int position =getAdapterPosition();
PlaceSaved place=items.get(position);
// Here is the data Do your stuff
}
To delete a specific item with position call. 用职位呼叫删除特定项目。
items.remove(position);
notifyItemRemoved(position);
Read Notify methods for RecyclerView.Adapter
Here . 在此处阅读
RecyclerView.Adapter
通知方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.