geklickt zu werden Ich habe eine recyclerView in einem Fragment erstellt, ich implementiere auch den onItemClickListener im Adapter. jetzt muss ich dem Klick die Aktion in der RecyclerView im Fragment geben, aber ich kann es nicht tun. Hoffe, du kannst mir helfen, es herauszufinden. Ich schätze es.Der Versuch, auf eine RecyclerView in Fragment
Erstens ist dies der Adapter:
// inner class to hold a reference to each item of RecyclerView
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
public TextView textName;
public TextView textAddress;
public ImageView imageView;
private Place place;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
textName = (TextView) itemLayoutView.findViewById(R.id.placeName);
textAddress = (TextView) itemLayoutView.findViewById(R.id.placeAddress);
imageView = (ImageView) itemLayoutView.findViewById(R.id.imagePlace);
}
public void bind(Place place) {
this.place = place;
textName.setText(place.getName());
textAddress.setText(place.getAdress());
}
@Override
public void onClick(View v) {
clickListener.onItemClick(getAdapterPosition(), v);
}
@Override
public boolean onLongClick(View v) {
clickListener.onItemLongClick(getAdapterPosition(), v);
return false;
}
public void setOnItemClickListener(ClickListener clickListener) {
PlaceAdapter.clickListener = clickListener;
}
public interface ClickListener {
void onItemClick(int position, View v);
void onItemLongClick(int position, View v);
Place sendToMap();
}
}
dann habe ich das Fragment:
public class FragmentNearMe extends Fragment
implements View.OnClickListener {
public static final String ARG_PAGE = "ARG_PAGE";
public static final String SEARCH_RESULT_ACTION="SEARCH_RESULT_ACTION";
private int aroundMe;
private PlaceAdapter adapter;
private LocationManager locationManager;
private SearchBrodcastReciver searchBrodcastReciver;
private EditText searchFild;
private LatLng latLng;
private ImageView iconPlace;
private Context context;
public void setLatLng(LatLng latLng) {
if (this.latLng == null) {
getView().findViewById(R.id.location_warning).setVisibility(View.GONE);
searchFild.setVisibility(View.VISIBLE);
}
this.latLng = latLng;
}
public static FragmentNearMe newInstance(int around) {
Bundle args = new Bundle();
args.putInt(ARG_PAGE, around);
FragmentNearMe fragment = new FragmentNearMe();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
aroundMe = getArguments().getInt(ARG_PAGE);
searchBrodcastReciver=new SearchBrodcastReciver();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_near_me, container, false);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RecyclerView listPlaces = (RecyclerView) view.findViewById(R.id.placesList);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
adapter = new PlaceAdapter(new ArrayList<Place>());
listPlaces.setLayoutManager(layoutManager);
listPlaces.setAdapter(adapter);
searchFild= (EditText) view.findViewById(R.id.textSearch);
ImageButton imageButton= (ImageButton) view.findViewById(R.id.searchbtn);
imageButton.setOnClickListener(this);
}
@Override
public void onResume() {
super.onResume();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(searchBrodcastReciver, new IntentFilter(SEARCH_RESULT_ACTION));
}
@Override
public void onPause() {
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(searchBrodcastReciver);
super.onPause();
}
@Override
public void onClick(View v) {
String placeName= searchFild.getText().toString();
if(placeName != null) {
Intent intent = new Intent(getActivity(), MyIntentService.class);
intent.putExtra(MyIntentService.KEY_PLACE, placeName);
intent.putExtra(MyIntentService.KEY_RADIUS, 5);
intent.putExtra(MyIntentService.KEY_LOCATION, latLng);
getActivity().startService(intent);
}else {
Toast.makeText(getContext() , "place not exsist" , Toast.LENGTH_SHORT).show();
}
}
public class SearchBrodcastReciver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(SEARCH_RESULT_ACTION)){
PlaceLogic placeLogic= new PlaceLogic(getActivity());
adapter.setPlaces(placeLogic.getAllPlaces());
}
}
}
}
Was meinst du mit * aber ich kann es nicht * tun? Was ist dein Problem? – Selvin
Ich meinte, ich muss auf ein Element in der RecyclerView klicken, also muss ich den Klick in das Fragment implementieren. und ich weiß nicht, wie es geht. –
folgen Sie meiner Antwort wird es funktionieren – MageNative