代码之家  ›  专栏  ›  技术社区  ›  Raj

获取在RecyclerView[重复]中单击的特定项目的id

  •  -1
  • Raj  · 技术社区  · 8 年前

    我在OnItemClickListener接口的OnItemClicked(int position,view v)方法中传递位置和视图。现在,在我的ViewReceiptointers活动中,我想检查单击了哪个项目和哪个子部分。如果用户单击图像,则执行任务A els如果用户单击名称,则执行任务B等。。

    这是我的布局文件-ViewReceptionister\u项。xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        cardElevation="5dp"
        contentPadding="10dp"
        app:cardCornerRadius="20dp"
        app:cardUseCompatPadding="true"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="12"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:background="@drawable/card_background">
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:layout_weight="2">
    
            <de.hdodenhof.circleimageview.CircleImageView
                android:id="@+id/viewReceptionistImage"
                android:layout_width="70dp"
                android:layout_height="70dp"
                app:civ_border_width="2dp"
                android:layout_gravity="center"
                app:civ_border_color="@color/black" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_marginLeft="10dp"
            android:layout_weight="9">
    
            <TextView
                android:id="@+id/textViewViewReceptionistName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Name"
                android:textSize="18dp"
                android:layout_marginTop="5dp"
                android:textColor="@color/black"
                android:textStyle="bold"/>
    
            <TextView
                android:id="@+id/textViewViewReceptionistEmail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Email"
                android:textSize="15dp"
                android:layout_marginTop="5dp"
                android:textColor="@color/black"
                android:textStyle="bold"/>
    
            <TextView
                android:id="@+id/textViewViewReceptionistMobile"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Mobile No."
                android:textSize="15dp"
                android:layout_marginTop="5dp"
                android:textColor="@color/black"
                android:textStyle="bold"/>
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:layout_weight="1">
    
            <de.hdodenhof.circleimageview.CircleImageView
                android:id="@+id/viewReceptionistGender"
                android:layout_width="40dp"
                android:layout_height="40dp"
                app:civ_border_width="2dp"
                android:layout_gravity="center"
                app:civ_border_color="@color/black" />
    
        </LinearLayout>
    
    </LinearLayout>
    </android.support.v7.widget.CardView>
    

    这是我的适配器-ViewReceptionarisonAdapter

    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import com.squareup.picasso.Picasso;
    
    import java.util.ArrayList;
    
    import de.hdodenhof.circleimageview.CircleImageView;
    
    public class ViewReceptionistAdapter extends RecyclerView.Adapter<ViewReceptionistAdapter.ViewReceptionistHolder>
    {
        Context context;
        int resource;
        ArrayList<Receptionist> objects;
    
        OnItemClickListener listener;
    
        public interface OnItemClickListener
        {
            void OnItemClicked(int position, View v);
        }
    
        public void setOnItemClickListener(OnItemClickListener listener)
        {
            this.listener = listener;
        }
    
        public ViewReceptionistAdapter(Context context, int resource, ArrayList<Receptionist> objects)
        {
            this.context = context;
            this.resource = resource;
            this.objects = objects;
        }
    
        @Override
        public ViewReceptionistHolder onCreateViewHolder(ViewGroup parent, int viewType)
        {
            View view = LayoutInflater.from(context).inflate(resource, parent, false);
    
            ViewReceptionistHolder viewReceptionistHolder = new ViewReceptionistHolder(view);
    
            return viewReceptionistHolder;
        }
    
        @Override
        public void onBindViewHolder(ViewReceptionistHolder holder, int position)
        {
            Receptionist receptionist = objects.get(position);
    
            holder.tvViewReceptionistName.setText(receptionist.name);
            holder.tvViewReceptionistEmail.setText(receptionist.email);
            holder.tvViewReceptionistMobile.setText(receptionist.mobile);
    
            String url = receptionist.imageUrl;
            Picasso.get().load(url).into(holder.viewReceptionistImage);
    
    
            String gender;
    
            gender = receptionist.gender;
    
            if(gender.equals("Male"))
            {
                holder.viewReceptionistgender.setImageResource(R.drawable.male_icon);
            }
            else
            {
                holder.viewReceptionistgender.setImageResource(R.drawable.female_icon);
            }
        }
    
        @Override
        public int getItemCount()
        {
            return objects.size();
        }
    
        public class ViewReceptionistHolder extends RecyclerView.ViewHolder
        {
    
            public TextView tvViewReceptionistName;
            public TextView tvViewReceptionistEmail;
            public TextView tvViewReceptionistMobile;
            public CircleImageView viewReceptionistImage;
            public CircleImageView viewReceptionistgender;
    
            public ViewReceptionistHolder(final View itemView)
            {
                super(itemView);
    
                tvViewReceptionistName = itemView.findViewById(R.id.textViewViewReceptionistName);
                tvViewReceptionistEmail = itemView.findViewById(R.id.textViewViewReceptionistEmail);
                tvViewReceptionistMobile = itemView.findViewById(R.id.textViewViewReceptionistMobile);
    
                viewReceptionistImage = itemView.findViewById(R.id.viewReceptionistImage);
                viewReceptionistgender = itemView.findViewById(R.id.viewReceptionistGender);
    
                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
                        if(listener != null)
                        {
                            int position = getAdapterPosition();
    
                            if(position != RecyclerView.NO_POSITION)
                            {
                                listener.OnItemClicked(position, v);
                            }
                        }
    
                    }
                });
            }
        }
    }
    

    这是ViewReceiptointers活动

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    import com.google.firebase.firestore.DocumentSnapshot;
    import com.google.firebase.firestore.EventListener;
    import com.google.firebase.firestore.FirebaseFirestore;
    import com.google.firebase.firestore.FirebaseFirestoreException;
    import com.google.firebase.firestore.Query;
    import com.google.firebase.firestore.QuerySnapshot;
    
    import java.util.ArrayList;
    
    public class ViewReceptionistActivity extends AppCompatActivity
    {
        RecyclerView recyclerView;
        ArrayList<Receptionist> receptionistsList;
    
        ViewReceptionistAdapter viewReceptionistAdapter;
    
        FirebaseFirestore firestore;
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_view_receptionist);
    
            getSupportActionBar().setTitle("View Receptionist");
    
            recyclerView = (RecyclerView)findViewById(R.id.recyclerView);
    
            firestore = FirebaseFirestore.getInstance();
            receptionistsList = new ArrayList<Receptionist>();
    
    
            Query query = firestore.collection("Receptionist").orderBy("name", Query.Direction.ASCENDING);
    
            query.addSnapshotListener(this, new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e)
                {
                    for(DocumentSnapshot documentSnapshot: documentSnapshots)
                    {
                        Receptionist receptionist = documentSnapshot.toObject(Receptionist.class);
                        receptionistsList.add(receptionist);
    
                        viewReceptionistAdapter.notifyDataSetChanged();
                    }
                }
            });
    
            viewReceptionistAdapter = new ViewReceptionistAdapter(this, R.layout.viewreceptionist_item, receptionistsList);
    
            viewReceptionistAdapter.setOnItemClickListener(new ViewReceptionistAdapter.OnItemClickListener() {
                @Override
                public void OnItemClicked(int position, View v)
                {
    
                    Toast.makeText(ViewReceptionistActivity.this, "You Clicked " + position + " " + v, Toast.LENGTH_SHORT).show();
    
    //HERE I WANT TO CHECK IF USER CLICKS AN IMAGE OR NAME OR EMAIL...
    //IF USER CLICKS IMAGE - PERFORM TASK A
    //IF USSER CLICKS NAME - PERFORM TASK B...AND SO ON
    
    
                }
            });
    
            LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false);
    
    
            recyclerView.setLayoutManager(manager);
            recyclerView.setAdapter(viewReceptionistAdapter);
    
        }
    }
    

    我想从视图中单击特定项目。。。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Levi Moreira    8 年前

    对于要向单击事件添加反应的每个视图,最好使用方法扩展单击界面:

    public interface OnItemClickListener
        {
            void OnItemImageClicked(int position, View v);
            void OnItemNameClicked(int position, View v);
        }
    

    在您的viewHolder中:

    viewReceptionistImage.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
                        if(listener != null)
                        {
                            int position = getAdapterPosition();
    
                            if(position != RecyclerView.NO_POSITION)
                            {
                                listener.OnItemImageClicked(position, v);
                            }
                        }
    
                    }
                });
    
    
    tvViewReceptionistName.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {
                        if(listener != null)
                        {
                            int position = getAdapterPosition();
    
                            if(position != RecyclerView.NO_POSITION)
                            {
                                listener.OnItemNameClicked(position, v);
                            }
                        }
    
                    }
                });
    

    然后,在ViewReceiptointers活动中,您只需实现接口并覆盖方法(因为它们会很多)。 然后在适配器中设置侦听器,如下所示:

    viewReceptionistAdapter.setOnItemClickListener(this);
    

    或者您可以使用旧方法:

    viewReceptionistAdapter.setOnItemClickListener(new ViewReceptionistAdapter.OnItemClickListener() {
                @Override
                public void OnItemImageClicked(int position, View v)
                {
                 Toast.makeText(ViewReceptionistActivity.this, "You Clicked " + position + "Image View: " + v, Toast.LENGTH_SHORT).show();
    
                }
    
                @Override
                public void OnItemNameClicked(int position, View v)
                {
                  Toast.makeText(ViewReceptionistActivity.this, "You Clicked " + position + " TextView: " + v, Toast.LENGTH_SHORT).show();
    
                }
            });