在将cardview点击为活动时,Recyclerview Onclick会传递特定数据

时间:2017-08-24 04:51:13

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

我要做的是将特定用户的数据传递到另一个活动,将其用户ID作为唯一ID
它会将相同的数据保存到其他活动中,我不知道该怎么做

this is the UI of fragment_home

此代码适用于 Fragment_Home ,我用它来从Firebase获取数据并将其填充到RecyclerView中,以及Onclick所在的位置此刻。

public class FragmentRO_Home extends Fragment {

private Intent intent;
private DatabaseReference database;
RecyclerView recyclerView;
Recycler_View_Adapter adapter;
TextView TV_nodata;
private String uid;
private String nombre;
public FragmentRO_Home() {
    // Required empty public constructor    qwe
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_fragment_ro__home,container,false);
    database = FirebaseDatabase.getInstance().getReference();
    final List<Data> data = new ArrayList();

    TV_nodata = (TextView)view.findViewById(R.id.TV_result);
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
    adapter = new Recycler_View_Adapter(data, getActivity());
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    fill_with_data();

这是onclick,我正在使用recyclerview,它可以使用。

    recyclerView.addOnItemTouchListener(new CustomRVItemTouchListener(getActivity(), recyclerView, new RecyclerViewItemClickListener() {
        @Override
        public void onClick(View view, int position) {
            if (position == 0){
                intent = new Intent(getActivity(), ReportInformation.class);
                intent.putExtra("idData",uid);
                startActivity(intent);
            }else if (position == 1){
                intent = new Intent(getActivity(), ReportInformation.class);
                intent.putExtra("idData",uid);
                startActivity(intent);
            }else if (position == 2){
                intent = new Intent(getActivity(), ReportInformation.class);
                intent.putExtra("idData",uid);
                startActivity(intent);
            }else if (position == 3){
                intent = new Intent(getActivity(), ReportInformation.class);
                intent.putExtra("idData",uid);
                startActivity(intent);
            }else if (position == 5){
                intent = new Intent(getActivity(), ReportInformation.class);
                intent.putExtra("idData",uid);
                startActivity(intent);
            }
        }

        @Override
        public void onLongClick(View view, int position) {

        }
    }));
    return view;
}

这是我填充我的recyclerview以获取firebase中数据的方法。

public void fill_with_data() {
    database.child("data_home").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot d) {

            if (d.exists()) {
                List<Data> list = new ArrayList<>();
                for (DataSnapshot dataw : d.getChildren()) {
                    Data data = dataw.getValue(Data.class);
                    list.add(data);

                    uid = (data.usirayd);
                    nombre = (data.title);
                }
                for (Data data : list) {
                    adapter.insert(new Data(data.title, data.description, data.condition, data.time,data.usirayd));
                }
            }else {
                TV_nodata.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    recyclerView.setAdapter(adapter);
}

3 个答案:

答案 0 :(得分:2)

试试此代码

 recyclerView.addOnItemTouchListener(new CustomRVItemTouchListener(getActivity(), recyclerView, new RecyclerViewItemClickListener() {
        @Override
        public void onClick(View view, int position) {

            if(data.size()>position){
              if (data.get(position)!= null){
                intent = new Intent(getActivity(), ReportInformation.class);
                intent.putExtra("idData",data.get(position).usirayd);
                startActivity(intent);
               }
            }
        }

        @Override
        public void onLongClick(View view, int position) {

        }
    }));
    return view;
}

答案 1 :(得分:1)

您的列表属于数据类型,因此您需要做的是使Data类成为parcleable,然后从单击的位置获取对象并将其发送到activity。 示例代码是这样的

 public void onClick(View view, int position) {
Data dataObject = list.get(position);
                intent = new Intent(getActivity(), ReportInformation.class);
                intent.putExtra("idData",uid);
intent.putExtra("Data",dataObject);
                startActivity(intent);

        }

如果你想发送点击位置的单个ID,那么只需从列表对象获取Id并像这样发送

 uid= list.get(postion).getUserId;

并以意图发送

并在其他类/活动中接受像这样的可分割对象

Data dataObjectReceived = getIntent().getExtras().getParcelable("Data");

如果您想获得单个实体,请通过其密钥获取

答案 2 :(得分:1)

点击要将数据传递到活动或片段中的cardView,您需要创建一个界面,例如在我的情况下,可以使用一个FriendModel

界面

public interface OnFriendListClickListener {
    void onItemClick(FriendModel model, int position);
}

<强>活动

public class FriendListActivity extends AppCompactActivity
        implements
        OnFriendListClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.activity_friend);

        //...
        rvRemoveFriendList.setAdapter(new FriendListAdapter(context, list, this));

    }

    @Override
    public void onItemClick(FriendModel model, int position) {
    //your code here
    }
}

<强>适配器

public class FriendListAdapter extends RecyclerView.Adapter<FriendListAdapter.FriendListHolder> {

    private List<FriendModel> friendList;
    private Context context;
    private OnFriendListClickListener listener;

    public FriendListAdapter(Context context,
                             List<FriendModel> friendList,
                             OnFriendListClickListener listener,) {
        this.context = context;
        this.friendList = friendList;
        this.listener = listener;
    }

    @Override
    public FriendListHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new FriendListHolder(LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row_friend, parent, false));
    }

    @Override
    public void onBindViewHolder(final FriendListHolder holder, int position) {
        holder.tvFriendNumber.setText(friendList.get(position).getFriendMobile());

        holder.llFriendListItem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onItemClick(friendList.get(holder.getAdapterPosition()),
                        holder.getAdapterPosition());
            }
        });

    }

  //......     

}