Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 滚动时ListView崩溃_Java_Android Studio_Android Listview - Fatal编程技术网

Java 滚动时ListView崩溃

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

我创建了一个ListView,当它被滚动时,在一些项目被滚动后崩溃,而它仍然被滚动。调试或错误消息如下所示:

还包括onCreate、loadItems和getView函数。我曾试图查明问题所在,但没有结果。我也在网上观察到类似的问题,但无法确定故障是什么。一定有人经历过这种困境

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