Надеюсь, мой вопрос имеет смысл: по сути, у меня есть фрагмент рециркулятора внутри фрагмента, который я хочу открыть другим фрагментом с помощью Onclick. Поскольку его фрагмент к фрагменту, я использую интерфейс / слушатель в моем адаптере просмотра повторного просмотра. Однако мне нужно передать что-то в моем адаптере recyclerView. Проблема в том, что адаптер находится в OnCreateView, который находится в OnSuccessListener, так как я получаю местоположение для моего приложения. Поэтому я не знаю, как передать что-либо кроме null для моего слушателя в моем адаптере. Мне нужно передать слушателя в моем адаптере. Я надеюсь, что это имеет смысл, но вот мой код, чтобы он был понятен:
RecyclerViewAdapter
public class MessierRecyclerViewAdapter extends RecyclerView.Adapter<MessierRecyclerViewAdapter.ViewHolder> {
private List<MessierData> MessierDataList;
Context mContext;
private MessierListener messierListener;
public interface MessierListener{
void onClicked(Bundle bundle);
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView currentLocation;
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
currentLocation = (TextView) itemView.findViewById(R.id.messier_location);
}
@Override
public void onClick(View view) {
if (messierListener !=null) {
int col = getAdapterPosition();
Bundle bundle = new Bundle();
bundle.putDouble("RightAscension", MessierDataList.get(col).getMessierRA());
bundle.putDouble("Declination", MessierDataList.get(col).getMessierDEC());
bundle.putDouble("Azimuth", MessierDataList.get(col).getMessierAZ());
bundle.putDouble("Altitude", MessierDataList.get(col).getMessierALT());
messierListener.onClicked(bundle);
}
}
}
public MessierRecyclerViewAdapter(List<MessierData> MessierDataList, Context mContext, MessierListener messierListener){
this.MessierDataList = MessierDataList;
this.mContext = mContext;
this.messierListener = messierListener;
}
@Override
public MessierRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.messier_recycler_item,parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder( MessierRecyclerViewAdapter.ViewHolder holder, int position) {
holder.currentLocation.setText(MessierDataList.get(position).getMessierLocation());
}
@Override
public int getItemCount() {
return MessierDataList.size() ;
}
}
Фрагмент, содержащий представление Recycler (фрагмент Messier)
В нем много кода, поэтому я просто добавлю onCreateView, который сейчас является проблемой:
public class MessierFragment extends Fragment implements
MessierRecyclerViewAdapter.MessierListener {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_messier, container, false);
mRecyclerView = (RecyclerView)view.findViewById(R.id.messier_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerView.addItemDecoration(new DividerItemDecoration(mRecyclerView.getContext(),DividerItemDecoration.VERTICAL));
mFusedLocationClient.getLastLocation().addOnSuccessListener(getActivity(), new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
Sun sunInstance = new Sun();
sunInstance.SunmCalculation(longitude, latitude);
Andromeda andromedaexample = new Andromeda();
andromedaexample.AndromedaCalculation(latitude);
messierList();
messierItems.addAll(messierList());
adapter = new MessierRecyclerViewAdapter(messierItems, mRecyclerView.getContext(),MessierFragment.this);
mRecyclerView.setAdapter(adapter);
}
}
});
return view;
}
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь передать что-то для слушателя Messier в адаптере, появляется предупреждение от Android Studio, поэтому я не уверен, как решить проблему. Прямо сейчас у меня есть MessierFragment.this, который не работает. Спасибо за вашу помощь.
РЕДАКТИРОВАНИЕ / ПРЕДУПРЕЖДЕНИЕ Android-студия предоставляет
Ожидаемый параметр в адаптере: MessierListener
Если я использую «this» в адаптере в onCreateView: this (anonymous ... android.location.Location>)
Надеюсь, это несколько прояснит проблему.