2017-08-24 51 views
0

我试图做的是从一个特定的用户传送数据到另一个活动使用它的用户ID作为唯一的ID
它使发送相同的数据到具体数据其他活动,我不知道如何做到这一点Recyclerview的onclick路过的时候点击cardview到活动

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(); 

这是我与recyclerview一起使用的onclick,它是可用的。

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从获取数据的的火力点。

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); 
} 
+0

什么是您的查询,什么是您所遇到的问题? – Mandy8055

+0

这是什么问题?你还没有发布你面临的问题。 –

+0

你面临什么问题,还有一件事情当你使用位置onclick事件,并且如果传递相同的数据,那么不要在位置上使用条件,只需从位置发送数据。如果其他位置u正在为每个位置发送相同的数据,请删除。 –

回答

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; 
} 
+0

感谢您的解决方案 –

1

你的列表是数据类型的,所以你需要做的是让数据类parcleable然后拿到对象形成的点击位置,并将其发送给活动。 示例代码是这样的

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和发送这样

uid= list.get(postion).getUserId; 

,并意图将其发送

以及在其他类别/活动信息中,这样的可分类对象

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

,如果你想获得单一实体然后把它的关键

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()); 
      } 
     }); 

    } 

    //......  

}