2016-08-11 48 views
2

我遇到了一個問題。 我需要實現回滾行爲,當用戶在ListView中獲得emptyView時。 但我不知道該怎麼做。Android ListView如何獲取空視圖事件

enter image description here

listView = (ListView) view.findViewById(R.id.ENumberList); 
outputWarning = (TextView) view.findViewById(R.id.warning); 
listView.setEmptyView(outputWarning); 

listView.setAdapter(scAdapter); 

listView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() { 
    @Override 
    public void onChildViewAdded(View view, View view1) { 

    } 

    @Override 
    public void onChildViewRemoved(View view, View view1) { 
     if (scAdapter.isEmpty()) 
     { 
      FragmentManager fragmentManager = getFragmentManager(); 
      fragmentManager.beginTransaction().addToBackStack(null).commit(); //error 
     } 
    } 
}); 

但我得到的錯誤:

08-11 21:05:00.401 9289-9289/com.ashomok.eNumbers E/com.ashomok.eNumbers.activities.MainFragment: Can not perform this action inside of onLoadFinished 
08-11 21:05:00.401 9289-9289/com.ashomok.eNumbers W/System.err: java.lang.IllegalStateException: Can not perform this action inside of onLoadFinished 
08-11 21:05:00.401 9289-9289/com.ashomok.eNumbers W/System.err:  at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1415) 
08-11 21:05:00.401 9289-9289/com.ashomok.eNumbers W/System.err:  at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1429) 
08-11 21:05:00.401 9289-9289/com.ashomok.eNumbers W/System.err:  at android.app.BackStackRecord.commitInternal(BackStackRecord.java:687) 
08-11 21:05:00.401 9289-9289/com.ashomok.eNumbers W/System.err:  at android.app.BackStackRecord.commit(BackStackRecord.java:663) 
08-11 21:05:00.401 9289-9289/com.ashomok.eNumbers W/System.err:  at com.ashomok.eNumbers.activities.MainFragment$2.onChildViewRemoved(MainFragment.java:153) 

反正我的解決方案看起來醜陋。你能給我更好的主意嗎?

+1

自動回滾可能會混淆用戶。取消按鈕應該清理搜索結果。仍然是一個奇怪的例外,很難說沒有應用程序架構的原因。 –

回答

1

1選項(不高貴,但應該工作):

if (emptyView.getVisibility() == View.VISIBLE) { 
    onBackPressed(); 
} 

但你應該增加延遲供用戶閱讀沒有結果的信息。

  1. 檢查適配器中的列表大小。

    如果搜索後沒有結果,則onBackPressed();

相關問題