【问题标题】:how to get recyclerview position data and pass it to another activity in android studio [duplicate]如何获取recyclerview位置数据并将其传递给android studio中的另一个活动[重复]
【发布时间】:2020-07-15 10:15:08
【问题描述】:

所以我创建了一个回收器视图,从我的 firebase 中检索一些数据,但我不知道如何获取键值以将其传递给另一个活动。

我试图从每个人那里得到一个教程,但没有一个人有和我一样的方法。

这是我的代码:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_proses_pesanan);


        mDatabase = FirebaseDatabase.getInstance().getReference();
        final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
        uid = firebaseAuth.getUid();

        mRecycler = findViewById(R.id.list_proses);
        mRecycler.setHasFixedSize(true);

        final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecycler.setLayoutManager(layoutManager);

        Query query = getQuery(mDatabase);

        FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<Status>()
                .setQuery(query, Status.class)
                .build();

        mAdapter = new FirebaseRecyclerAdapter<Status, StatusViewHolder>(options) {
            @Override
            public StatusViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                LayoutInflater inflater = LayoutInflater.from(parent.getContext());


                return new StatusViewHolder(inflater.inflate(R.layout.item_status, parent, false));
            }
            @Override
            protected void onBindViewHolder(@NonNull final StatusViewHolder holder, final int position, @NonNull final Status model) {
                holder.binToStatus(model, new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {


                    }
                });
            }
        };

        mAdapter.notifyDataSetChanged();
        mRecycler.setAdapter(mAdapter);

    }

    @Override
    public void onStart() {
        super.onStart();
        if (mAdapter != null) {
            mAdapter.startListening();
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        if (mAdapter != null) {
            mAdapter.stopListening();
        }
    }

    private Query getQuery(DatabaseReference mDatabase) {
        Query query = mDatabase.child("PesanFoto").child(uid);
        return query;
    }
}

如您所见,我有一个带有模型和 MyViewHolder 类的回收站视图。但我不知道如何获取我的回收站视图的位置来获取数据

【问题讨论】:

    标签: java android firebase-realtime-database android-recyclerview


    【解决方案1】:

    如果您想在单击RecyclerView 的特定项目时执行此操作,可以使用ViewHolder.getAdapterPosition,这将为您获取此ViewHolder 所代表的项目的适配器位置。

    【讨论】:

    • 我在哪里使用该代码,你能告诉我吗?对不起,我是新来的
    • 你想从哪里开始活动?
    • DetailActivity.java
    【解决方案2】:

    我会建议你使用自己的回收器视图和适配器类,然后创建一个 RecyclerItemClickListener 类来执行项目点击监听器

    public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
    
       private OnItemClickListener mListener;
    
       public interface OnItemClickListener {
           public void onItemClick(View view, int position);
    
           public void onLongItemClick(View view, int position);
       }
    
       GestureDetector mGestureDetector;
    
       public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
           mListener = listener;
           mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
               @Override
               public boolean onSingleTapUp(MotionEvent e) {
                   return true;
               }
    
               @Override
               public void onLongPress(MotionEvent e) {
                   View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                   if (child != null && mListener != null) {
                       mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
                   }
               }
           });
       }
       @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
           View childView = view.findChildViewUnder(e.getX(), e.getY());
           if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
               mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
               return true;
           }
           return false;
       }
    
       @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
    
       @Override
       public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}
    }
    

    然后将 clicklistener 添加到您的回收站视图项中

            recycler_view.addOnItemTouchListener(
                    new RecyclerItemClickListener(getContext(), recycler_view, new RecyclerItemClickListener.OnItemClickListener() {
                        @Override
                        public void onItemClick(View view, int position) {
    
    //here you are getting the selected position object/data
                            Object object = yourArrayList.get(position);
    
    // you can navigate to next screen then
                            navigateToNextActivityCode();
                        }
    
                        @Override
                        public void onLongItemClick(View view, int position) {
    
                        }
                    })
                 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 2021-12-02
      相关资源
      最近更新 更多