我有一個具有listView的android片段。現在我想實現onItemClickListener並顯示一個Modal,如果用戶點擊一個ListView項。然後,如果我點擊一個項目,我應該看到另一個listView的Modal。因此,用我的代碼,如果我嘗試點擊一個項目,我可以顯示我的主要listView的最後一個元素的項目,這是不好的。我如何在ListView上實現OnItemClickListener
這是我的片段:
public class AlertsFragment extends Fragment {
private AlertAdapter pAdapter;
AlertXAgentAdapter agentAdapter;
AlertXReactionAdapter reactionAdapter;
private RecyclerView recyclerView,recyclerAgentView,recyclerReactionView;
private List<Alert> lista= new ArrayList<Alert>();
View v;
ExpandableListView expandableListView;
ExpandableListAdapter expandableListAdapter;
private static final int ARG_SECTION_NUMBER =6;
@Override
public void onAttach(Context context) {
super.onAttach(context);
((AndroidNavDrawerActivity) context).onSectionAttached(
ARG_SECTION_NUMBER);
}
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
v=inflater.inflate(R.layout.alerts_activity, container, false);
recyclerView = (RecyclerView) v.findViewById(R.id.recycler_view);
//recupero la lista delle medication
AlertDAO manager = new AlertDAO(this.getContext());
lista = manager.getAlerts();
pAdapter = new AlertAdapter(lista, new AlertAdapter.OnItemClickListener() {
@Override
public void onItemClick(Alert item) {
try{
final Dialog dialog = new Dialog(v.getContext());
LayoutInflater inflater = LayoutInflater.from(v.getContext());
View dialogView = inflater.inflate(R.layout.alert_agent_reaction_modal, null);
//agent
recyclerAgentView = (RecyclerView) dialogView.findViewById(R.id.recycler_agent_view);
//reaction
recyclerReactionView = (RecyclerView) dialogView.findViewById(R.id.recycler_reaction_view);
dialog.setContentView(dialogView);
dialog.setTitle("Agent and Reaction");
//agent
agentAdapter = new AlertXAgentAdapter(item.getListaAgent());
//reaction
reactionAdapter = new AlertXReactionAdapter(item.getListaReaction());
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(v.getContext());
recyclerAgentView.setLayoutManager(mLayoutManager);
recyclerAgentView.setItemAnimator(new DefaultItemAnimator());
recyclerAgentView.setAdapter(agentAdapter);
RecyclerView.LayoutManager mLayoutManager2 = new LinearLayoutManager(v.getContext());
recyclerReactionView.setLayoutManager(mLayoutManager2);
recyclerReactionView.setItemAnimator(new DefaultItemAnimator());
recyclerReactionView.setAdapter(reactionAdapter);
dialog.show();
}catch(Exception e){
Log.e("","");
}
}
});
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(v.getContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(pAdapter);
/**
* Inflate the layout for this fragment
*/
return v;
}
}
這是我的適配器
public class AlertAdapter extends RecyclerView.Adapter<AlertAdapter.MyViewHolder> {
private List<Alert> list;
public Alert alert;
public OnItemClickListener listener;
public interface OnItemClickListener {
void onItemClick(Alert item);
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView startDate, endDate,description,status;
public MyViewHolder(View view) {
super(view);
startDate = (TextView) view.findViewById(R.id.startDate);
endDate = (TextView) view.findViewById(R.id.endDate);
description = (TextView) view.findViewById(R.id.description);
status = (TextView) view.findViewById(R.id.status);
view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(listener != null){
listener.onItemClick(alert);
}
}
}
public AlertAdapter(List<Alert> list,OnItemClickListener listener) {
this.list = list;
this.listener=listener;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.alert_list_row, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
alert = list.get(position);
holder.startDate.setText(alert.getDateStart()!=null ? alert.getDateStart() : "");
holder.endDate.setText(alert.getDateEnd()!=null ? alert.getDateEnd() : "");
holder.description.setText(alert.getAlertInfo().getDisplayName());
//holder.type.setText(planOfCare.getDateEnd()!=null ? planOfCare.getDateEnd() : "");
holder.status.setText(alert.getAlarmAlertInfo().getDisplayName());
}
@Override
public int getItemCount() {
return list.size();
}
}
請參閱[Recyclerview click listener](http://stackoverflow.com/questions/36759744/onclicklistener-on-the-specific-item -of-the-recyclerview-in-android/36759897#36759897) – Bhushan
如果您閱讀我的代碼,我只是這樣做,但不能工作 – bircastri
將調試點或日誌語句檢查代碼是否正在執行 – Bhushan