это мой код:почему findviewbyposition() из recyclerView возвращает нуль только иногда
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_add_aircraft, container, false);
recyclerView=(RecyclerView)rootView.findViewById(R.id.recyclerAircraftAdd);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
adapter = new AircraftAdapter(getActivity(),path);
recyclerView.setAdapter(adapter);
Button button = (Button)rootView.findViewById(R.id.salvaereo);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
adapter = (AircraftAdapter)recyclerView.getAdapter();
ParseObject aircraft = new ParseObject("Aircrafts");
for(int i = 0;i<adapter.getItemCount(); i++)
{
if (i== 0) //first card
{
View view = recyclerView.getLayoutManager().findViewByPosition(i);
ImageView image = (ImageView)view.findViewById(R.id.aircfraftImg);
image.setDrawingCacheEnabled(true);
image.buildDrawingCache();
Bitmap bm = image.getDrawingCache();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
ParseFile file = new ParseFile("Image.jpg",bytes);
aircraft.put("aircraft_image",file);
file.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
Log.d("sa","tutto ok");
}
});
}
else if (i ==1) //second card
{
View view = recyclerView.getLayoutManager().findViewByPosition(i);
EditText immatricolazione =(EditText)view.findViewById(R.id.immatricolazione);
EditText modello = (EditText)view.findViewById(R.id.modello);
EditText manifacturer = (EditText)view.findViewById(R.id.manifacturer);
EditText categoria = (EditText)view.findViewById(R.id.categoria);
EditText classe = (EditText)view.findViewById(R.id.classe);
EditText velocita = (EditText)view.findViewById(R.id.velocita);
EditText autonomia = (EditText)view.findViewById(R.id.autonomia);
EditText consumo = (EditText)view.findViewById(R.id.consumo);
EditText posti = (EditText)view.findViewById(R.id.postitotali);
EditText costo = (EditText)view.findViewById(R.id.costorario);
aircraft.put("re",immatricolazione.getEditableText().toString());
aircraft.put("ml",modello.getEditableText().toString());
aircraft.put("man",manifacturer.getEditableText().toString());
aircraft.put("Aircraft_Type",categoria.getEditableText().toString());
aircraft.put("ar",classe.getEditableText().toString());
aircraft.put("post",Integer.parseInt(posti.getEditableText().toString()));
aircraft.put("meter",Integer.parseInt(consumo.getEditableText().toString()));
aircraft.put("speed",Integer.parseInt(velocita.getEditableText().toString()));
aircraft.put("prezzi",Float.parseFloat(costo.getEditableText().toString()));
aircraft.put("fuel",Integer.parseInt(autonomia.getEditableText().toString()));
}
else if(i==2) //third card
{
View view = recyclerView.getLayoutManager().findViewByPosition(i);
EditText description = (EditText) view.findViewById(R.id.description);
aircraft.put("descrizione", description.getEditableText().toString());
aircraft.put("User", ParseUser.getCurrentUser());
dialog = ProgressDialog.show(getActivity(), "", "Caricamento aereo in corso...", true);
aircraft.saveInBackground(new SaveCallback() {
public void done(ParseException e) {
dialog.dismiss();
if (e == null) {
new AlertDialog.Builder(getActivity())
.setMessage("Caricamento aereo avvenuto con successo!")
.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).create().show();
} else {
new AlertDialog.Builder(getActivity())
.setMessage("Non è stato possibile caricare l'aereo, riprova più tardi!")
.setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).create().show();
}
}
});
}
}
}
});
return rootView;
}
но есть такая проблема: если я заряжаю фото (первая карту) и нажмите кнопку, он загружает фотографию, но если я пишу в EditText, он выходит из строя и дает мне эту ошибку:
Process: com.run.flyproject, PID: 10796 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference at com.run.flyproject.Fragments.AddAircraftFragment$1.onClick(AddAircraftFragment.java:78) at android.view.View.performClick(View.java:4756) at android.view.View$PerformClick.run(View.java:19749) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5253) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Сумма просмотров и количество предметов различны. RecyclerView только создает столько просмотров, сколько необходимо для заполнения его размера. Возвращаемое значение null означает, что представление не существует для этой позиции позиции. – DeeV
, но у меня есть только 3 вида. – ste9206
«null, если позиция не выложена». В любом случае вид не существует, и вам нужно подготовиться к нему. https://developer.android.com/reference/android/support/v7/widget/RecyclerView.LayoutManager.html#findViewByPosition(int) – DeeV