Java 滚动时ListView崩溃
我创建了一个ListView,当它被滚动时,在一些项目被滚动后崩溃,而它仍然被滚动。调试或错误消息如下所示: 还包括onCreate、loadItems和getView函数。我曾试图查明问题所在,但没有结果。我也在网上观察到类似的问题,但无法确定故障是什么。一定有人经历过这种困境Java 滚动时ListView崩溃,java,android-studio,android-listview,Java,Android Studio,Android Listview,我创建了一个ListView,当它被滚动时,在一些项目被滚动后崩溃,而它仍然被滚动。调试或错误消息如下所示: 还包括onCreate、loadItems和getView函数。我曾试图查明问题所在,但没有结果。我也在网上观察到类似的问题,但无法确定故障是什么。一定有人经历过这种困境 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.egent.adagesapp, PID: 12677
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;
}
E/AndroidRuntime:致命异常:主
进程:com.example.egent.adagesapp,PID:12677
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int android.view.view.getImportantForAccessibility()”
在android.widget.AbsListView.obtainView(AbsListView.java:2382)
位于android.widget.ListView.makeAndAddView(ListView.java:2052)
在android.widget.ListView.fillDown(ListView.java:786)中
在android.widget.ListView.fillGap(ListView.java:750)上
在android.widget.AbsListView.trackMotionScroll(AbsListView.java:5225)上
位于android.widget.ListView.trackMotionScroll(ListView.java:1971)
在android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4769)
在android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
位于android.view.Choreographer.doCallbacks(Choreographer.java:723)
位于android.view.Choreographer.doFrame(Choreographer.java:655)
在android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)中
位于android.os.Handler.handleCallback(Handler.java:790)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6494)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u惯用语\u列表);
lvAdages=(ListView)findViewById(R.id.lvAdages和成语);
tvPageTitle=(TextView)findViewById(R.id.TvExplagmentsandIliconScont);
tvTotalAdageCount=(TextView)findViewById(R.id.tvTotalAdageCount);
btnNext=(按钮)findViewById(R.id.btnNext);
btnPrev=(按钮)findViewById(R.id.btnPrevious);
btnPreviousClicked();
btnNextClicked();
onAdageListItemClicked();
试一试{
aAdapter=新的AdageAdapter(getApplicationContext(),R.layout.saddle\u idiom\u row);
tvTotalAdageCount.setText(“Total Adages=“+String.valueOf(DbContract.DbEntry.tempAdageList.size()));
if(DbContract.DbEntry.tempAdageList!=null)
{
TOTAL_ITEMS=DbContract.DbEntry.tempAdageList.size();
}
其他的
项目总数=0;
int val=每页的项目总数%NUM;
val=(val==0?0:1);
pageCount=总项目数/每页项目数+val;
if(DbContract.DbEntry.tempAdageList!=null&&DbContract.DbEntry.tempAdageList.size()>0)
{
for(AdageDetails:DbContract.DbEntry.tempAdageList)
{
aa适配器。添加(详细信息);
}
}
if(DbContract.DbEntry.tempAdageList!=null&&DbContract.DbEntry.tempAdageList.size()>0)
加载项(当前页);
选中启用();
}
捕获(例外e)
{
字符串str=e.getMessage();
int i=5;
而(i>0)
{
Toast.makeText(getApplicationContext(),“初始化列表失败!*强调文本*”+str,Toast.LENGTH_LONG).show();
我--;
}
}
}
专用void加载项(整版页)
{
试一试{
整数计数=0;
列表详细信息=新建ArrayList();
if(DbContract.DbEntry.tempAdageList!=null)
count=DbContract.DbEntry.tempAdageList.size();
如果(页面计数>0)
tvPageTitle.setText(“第”+(第+1页)+”页,共“+pageCount”;
其他的
tvPageTitle.setText(“第”+(第)+”页,共“+pageCount”);
int start=page*NUM\u每个页面的项目数;
对于(int i=开始;i0)
{
Toast.makeText(getApplicationContext(),“分页失败!”+str,Toast.LENGTH\u LONG.show();
我--;
}
}
}
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级)
{
视图行=转换视图;
ViewHolder=新的ViewHolder();
if(行==null)
{
LayoutFlater充气器=(LayoutFlater)this.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
row=充气机。充气(R.layout.saddle\u idiom\u row,parent,false);
holder.adageTitle=row.findviewbyd(R.id.tvAdageRowTitle);
holder.adageMain=row.findViewById(R.id.tvAdageRowMain);
holder.adageImage=行.findViewById(R.id.ivAdageRowPicture);
holder.adageID=行findViewById(R.id.tvAdageIDRow);
holder.adageType=row.findviewbyd(R.id.tvAdageTypeRow);
holder.adageCountry=row.findViewById(R.id.tAdageCountryRow);
holder.rowLayout=row.findViewById(R.id.llIdRow);
row.setTag(支架);
}
其他的
{
holder=(ViewHolder)row.getTag();
}
尝试
{
AdageDetails=(AdageDetails)getItem(pos