2017-08-24 59 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()); 
      } 
     }); 

    } 

    //......  

}