简体   繁体   English

从onclick获取数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM