Yuliia Ashomok
Yuliia Ashomok

Reputation: 8598

Android ListView how to obtain on empty view event

I faced with a problem. I need to implement go-back behavior when user got emptyView in ListView. But I have no good idea how to do it.

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
        }
    }
});

But I've got the 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)

Anyway my solution looks ugly. Can you give me the better idea?

Upvotes: 2

Views: 176

Answers (1)

Esperanz0
Esperanz0

Reputation: 1586

1 option ( not elegent but should work) :

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

but You should add delay for user to read information about no result.

  1. check the list size in adapter.

    if after searching has no result then onBackPressed();

Upvotes: 1

Related Questions