I have created a ListView which when scrolled, crashes after some items have been scrolled and, while it is still being scrolled. The debug or error message is below:
Included are also the onCreate, loadItems and getView functions. I have tried to ascertain what the problem could be, to no avail. I have also observed similar problems online without being able to ascertain what the fault is. Someone must have gone through this predicament.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.egent.adagesapp, PID: 12677
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
at android.widget.AbsListView.obtainView(AbsListView.java:2382)
at android.widget.ListView.makeAndAddView(ListView.java:2052)
at android.widget.ListView.fillDown(ListView.java:786)
at android.widget.ListView.fillGap(ListView.java:750)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5225)
at android.widget.ListView.trackMotionScroll(ListView.java:1971)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4769)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:655)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_idioms_list);
lvAdages = (ListView) findViewById(R.id.lvProverbsAndIdioms);
tvPageTitle = (TextView) findViewById(R.id.tvProverbsAndIdiomsCount);
tvTotalAdageCount = (TextView) findViewById(R.id.tvTotalAdageCount);
btnNext = (Button) findViewById(R.id.btnNext);
btnPrev = (Button) findViewById(R.id.btnPrevious);
btnPreviousClicked();
btnNextClicked();
onAdageListItemClicked();
try {
aAdapter = new AdageAdapter(getApplicationContext(), R.layout.proverb_idiom_row);
tvTotalAdageCount.setText("Total Adages = "+ String.valueOf(DbContract.DbEntry.tempAdageList.size()));
if(DbContract.DbEntry.tempAdageList != null)
{
TOTAL_ITEMS = DbContract.DbEntry.tempAdageList.size();
}
else
TOTAL_ITEMS = 0;
int val = TOTAL_ITEMS % NUM_ITEMS_PER_PAGE;
val = (val == 0? 0:1);
pageCount = TOTAL_ITEMS / NUM_ITEMS_PER_PAGE + val;
if (DbContract.DbEntry.tempAdageList != null && DbContract.DbEntry.tempAdageList.size() > 0)
{
for (AdageDetails details : DbContract.DbEntry.tempAdageList)
{
aAdapter.add(details);
}
}
if(DbContract.DbEntry.tempAdageList != null && DbContract.DbEntry.tempAdageList.size() > 0)
loadItems(currentPage);
checkEnable();
}
catch (Exception e)
{
String str = e.getMessage();
int i = 5;
while (i>0)
{
Toast.makeText(getApplicationContext(), "Inialising List failed! *emphasized text*" + str, Toast.LENGTH_LONG).show();
i--;
}
}
}
private void loadItems(int page)
{
try{
int count = 0;
List<AdageDetails> details = new ArrayList<AdageDetails>();
if(DbContract.DbEntry.tempAdageList != null)
count = DbContract.DbEntry.tempAdageList.size();
if(pageCount > 0)
tvPageTitle.setText("Page "+(page+1)+" of "+pageCount);
else
tvPageTitle.setText("Page "+(page)+" of "+pageCount);
int start = page * NUM_ITEMS_PER_PAGE;
for(int i=start;i<(start + NUM_ITEMS_PER_PAGE);i++)
{
if(i<count)
{
details.add(DbContract.DbEntry.tempAdageList.get(i));
}
else
{
break;
}
}
aAdapter = new AdageAdapter(getApplicationContext(), R.layout.proverb_idiom_row);
for(AdageDetails detail:details)
{
aAdapter.add(detail);
}
lvAdages.setAdapter(aAdapter);
}
catch (Exception e)
{
String str = e.getMessage();
if(DbContract.DbEntry.allAdageList.size() > 0)
DbContract.DbEntry.tempAdageList = DbContract.DbEntry.allAdageList;
int i = 5;
while (i>0)
{
Toast.makeText(getApplicationContext(), "Paging failed! " + str, Toast.LENGTH_LONG).show();
i--;
}
}
}
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent)
{
View row = convertView;
ViewHolder holder = new ViewHolder();
if(row == null)
{
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.proverb_idiom_row, parent, false);
holder.adageTitle = row.findViewById(R.id.tvAdageRowTitle);
holder.adageMain = row.findViewById(R.id.tvAdageRowMain);
holder.adageImage = row.findViewById(R.id.ivAdageRowPicture);
holder.adageID = row.findViewById(R.id.tvAdageIDRow);
holder.adageType = row.findViewById(R.id.tvAdageTypeRow);
holder.adageCountry = row.findViewById(R.id.tvAdageCountryRow);
holder.rowLayout = row.findViewById(R.id.llIdRow);
row.setTag(holder);
}
else
{
holder = (ViewHolder) row.getTag();
}
try
{
AdageDetails aDetails = (AdageDetails) getItem(position);
holder.adageTitle.setText(aDetails.getStrAdageIgbo().substring(0,20)+"...");
holder.adageMain.setText(aDetails.getStrAdageMeaningLiteral());
holder.adageID.setText(String.valueOf(aDetails.getiNum()));
holder.adageType.setText((aDetails.getStrAdageType().contains("Idiom")? "This is an "+ aDetails.getStrAdageType(): "This is a "+ aDetails.getStrAdageType()) );
if(aDetails.getStrPhotoPath() == null)
holder.adageImage.setImageResource(getPhotoOrVoiceID("R.drawable.na"));
else
holder.adageImage.setImageResource(getPhotoOrVoiceID(aDetails.getStrPhotoPath()));
holder.adageCountry.setText("This " + aDetails.getStrAdageType()+" is from "+ aDetails.getStrTribe()+ " in " + aDetails.getStrCountry());
if(position % 2 == 0)
holder.rowLayout.setBackgroundResource(R.drawable.rounded_corners_btn);
else
holder.rowLayout.setBackgroundResource(R.drawable.rounded_corners_btn2);
}
catch (Exception ee)
{
String str = ee.getMessage();
Toast.makeText(cContext, "Adage Adapter error, "+ str, Toast.LENGTH_LONG).show();
ee.printStackTrace();
return null;
}
return row;
}