2015-01-21 2 views
0

다음은 내 문제를 설명하는 일부 의사 Java 코드입니다. 기본적으로 내 어댑터의 getView()이보기를 성공적으로 반환하는지 여부에 따라 다른보기 (ViewGood 또는 ViewEmpty)를 반환하려고합니다. 그러나 내가 이해하는 한 setAdapter() 함수 호출은 비동기 적으로 실행되고 ListView는 나중에 setAdapter() 호출 바로 다음에 렌더링되므로 ViewGood 또는 ViewEmpty을 반환할지 여부를 알 수 없습니다. 누구든지 이것에 대한 해결책을 가지고 있습니까?ListView가 성공적으로 렌더링되면 특정 값을 반환하십시오.

public class MyFragment { 
    private ListView mListView; 

    @Override 
    public onCreateView() { 
     boolean atLeastOneViewLoaded = false; 
     mListView.setAdapter(MyAdapter); 
     if (atLeastOneViewLoaded) { 
      return ViewGood; 
     } else { 
      return ViewEmpty; 
     } 
    } 
} 


public class MyAdapter { 
    @Override 
    public View getView() { 
     // if at least one view returns here successfully, then I want to 
     // return ViewGood, otherwise return ViewEmpty 
    } 
} 

답변

0

인터페이스를 사용할 수 있습니다. 그냥 어댑터 생성자의 인스턴스를 전달하십시오.

  public class MyAdapter { 
private ActivityAdapterListener mListener; 
private ArrayList<Pojo> myArray; 

public MyAdapter (ArrayList<YourPojo> yourArray, ActivityAdapterListener listener){ 
this.mListener = listener; 
this.myArray = yourArray; 
    } 
} 

    @Override 
public View getView(int position) { 
    // if at least one view returns here successfully, then I want to 
    // return ViewGood, otherwise return ViewEmpty 
Pojo pojo = getItem(position); 
if(position > 0) 
{ 
listener.onSuccess(); 
} 

} 

위 테스트하지는 않았지만 아이디어가 필요합니다.

+0

이 접근법의 문제점은'if (atLeastOneViewLoaded) {}'명령이 {{listener.onSuccess()}가 호출 될 때까지 실행을 마쳤으므로 정확한 값을 반환 할 수 없다는 것입니다. – joeschmidt45

+0

당신이 올바르게 접근했다는 것을 안다면, 빈 목록이 있으면 특정보기를 보여주고 싶습니까? 어떤 경우에 ListFragment가 유용할까요? 목록이 비어있는 경우 표시 할 대체보기를 지정할 수 있습니다. http://developer.android.com/reference/android/app/ListFragment.html –

관련 문제