2013-02-21 3 views
2

내 앱에 Chris Banes implementation of pull to refresh list view을 (를) 사용하셨습니다. 문제는 목록보기에 대한 가시성을 사라 졌거나 보이지 않게 설정하고 Java 코드에서 표시되도록 설정하면 목록이 표시되지 않습니다. 반면에 내가 가시성을 가시화로 설정하거나 가시성을 설정하지 않으면 모든 것이 정상적으로 작동합니다. 필자의 요구 사항은 동일한 활동에 두 개의 목록보기가 있다는 것입니다. 서버에서 데이터를 얻은 후에는 가시성을 먼저 설정해야합니다. 다른 하나는 검색 기능에 나타납니다. XML 코드에서 검색 결과의 listview에 대한 가시성을 설정하고 검색 결과를 얻을 때만 표시되도록 설정했습니다. 이 목록보기에 setVisibility()을 사용 했음에도 불구하고 결코 화면을 표시하지 않습니다. 서버 응답도 확인했습니다. logcat에서 검색 결과를 보여줍니다.Android : PullToRefresh 목록보기가 표시되지 않음

나는 아래에 내 코드를 게시하고있다 : Activity에서

코드 조각

//The result from this async task will populate the first list view 

if(NetworkConnection.isOnline(MainCategory.this)) 
{ 
    new MainMenuAsyncTask(dataUrl, MainCategory.this, listMainMenu, false).execute(); 
} 
else 
{ 
    Log.v(TAG, "no network available"); 
    SeattleNightLifeUtility.OpenWiFiDialog(MainCategory.this, getResources().getString(R.string.no_internet_msg)); 
} 

loadListView(); 

//This will populate the list view that I have created for search results 

_txtAutoSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() 
{ 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) 
    { 
     String term = _txtAutoSearch.getText().toString().trim(); 
     if(! term.equals("")) 
     { 
      SeattleNightLifeUtility.hideSoftKeyboard(MainCategory.this, _txtAutoSearch); 
      if(NetworkConnection.isOnline(MainCategory.this)) 
      { 
       search(term, false); 
      } 
      else 
      { 
       SeattleNightLifeUtility.OpenWiFiDialog(MainCategory.this, getResources().getString(R.string.no_internet_msg)); 
      } 
     } 
     return true; 
     }//onEditorAction 
    }); 

    listMainMenu.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() 
    { 
     @Override 
     public void onRefresh() 
     { 
      if(NetworkConnection.isOnline(MainCategory.this)) 
      { 
       new MainMenuAsyncTask(dataUrl, MainCategory.this, listMainMenu, true).execute(); 
      } 
      else 
      { 
       SeattleNightLifeUtility.OpenWiFiDialog(MainCategory.this, getResources().getString(R.string.no_internet_msg)); 
      } 
     } 
    }); 

    listViewSearch.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() 
    { 
     public void onRefresh() 
     { 
      if(NetworkConnection.isOnline(MainCategory.this)) 
      { 
       search(_txtAutoSearch.getText().toString().trim(), true); 
      } 
      else 
      { 
       SeattleNightLifeUtility.OpenWiFiDialog(MainCategory.this, getResources().getString(R.string.no_internet_msg)); 
      } 
     } 
    }); 

검색 결과 비동기 작업

public class GetSearchAsyncTask extends AsyncTask<Void, Void, String> 
{ 
Context ctx; 
ProgressDialog pd; 
PullToRefreshListView listViewSearch; 
public static final String TAG = "GetSearchAsyncTask"; 
public static ArrayList<SearchDAO> searchArrayList; 

private String term, callingclass; 
private TextView txtNoData; 
boolean flag; 

public GetSearchAsyncTask(String term, Context ctx, 
     PullToRefreshListView listViewSearch, TextView txtNoData, 
     String callingclass, boolean flag) 
{ 
    this.term = term; 
    this.ctx = ctx; 
    this.listViewSearch = listViewSearch; 
    this.txtNoData = txtNoData; 
    this.callingclass = callingclass; 
    this.flag = flag; 
}//Constructor 

@Override 
protected void onPreExecute() 
{ 
    if(flag == false) 
    { 
     pd = new ProgressDialog(ctx); 
     pd.setMessage(ctx.getResources().getString(R.string.please_wait)); 
     pd.show(); 
    } 
}//onPreExecute 

protected String doInBackground(Void... params) 
{ 
    String parsed = ServerConnection.getSearchedData(term); 
    try 
    { 
     if(flag == true) 
     { 
      Log.v(TAG, "doInBackground isListRefreshed is true"); 
      Thread.sleep(2000); 
     } 
    } 
    catch(Exception e){} 
    return parsed; 
}//doInBackground 

@Override 
protected void onPostExecute(String result) 
{ 
    searchArrayList = ParsedSearchData.getSearchedData(result); 
    listViewSearch.setVisibility(View.VISIBLE); 

    if(searchArrayList != null && searchArrayList.size() > 0) 
    { 
     Log.v(TAG, "searcharraylist not null"); 
     for(int i = 0; i < searchArrayList.size(); i++) 
     { 
      Log.v(TAG, "Name: "+searchArrayList.get(i).getMerchant()); 
     } 
     SearchAdapter mSearchAdapter = new SearchAdapter(ctx, searchArrayList); 
     mSearchAdapter.notifyDataSetChanged(); 
     listViewSearch.setAdapter(mSearchAdapter); 

     if(callingclass.equals("EventActivity")) 
     { 
      Log.v(TAG, "callingclass EventActivity"); 
      if(txtNoData.getVisibility() == View.VISIBLE) 
      { 
       Log.v(TAG, "txtNoData VISIBLE"); 
       txtNoData.setVisibility(View.GONE); 
      } 
      if(((EventsActivity)ctx).txtNoEvent.getVisibility() == View.VISIBLE) 
      { 
       Log.v(TAG, "txtNoEvent VISIBLE"); 
       ((EventsActivity)ctx).txtNoEvent.setVisibility(View.GONE); 
      } 
     } 
     else 
     { 
      Log.v(TAG, "callingclass not EventActivity"); 
      if(txtNoData.getVisibility() == View.VISIBLE) 
      { 
       Log.v(TAG, "else loop txtNoData VISIBLE"); 
       txtNoData.setVisibility(View.GONE); 
      } 
      if(listViewSearch.getVisibility() == View.VISIBLE) 
      { 
       Log.v(TAG, "listViewSearch VISIBLE"); 

      } 
      else 
      { 
       Log.v(TAG, "listViewSearch INVISIBLE"); 
      } 
     } 
    } 
    else 
    { 
     Log.v(TAG, "searcharraylist null"); 
     if(callingclass.equals("EventActivity")) 
     { 
      Log.v(TAG, "callingclass EventActivity"); 
      txtNoData.setVisibility(View.VISIBLE); 
      listViewSearch.setVisibility(View.GONE); 

      if(((EventsActivity)ctx).txtNoEvent.getVisibility() == View.VISIBLE) 
      { 
       Log.v(TAG, "searcharraylist null else txtNoEvent VISIBLE"); 
       ((EventsActivity)ctx).txtNoEvent.setVisibility(View.GONE); 
      } 
     } 
     else 
     { 
      Log.v(TAG, "callingclass not EventActivitysearcharraylist null else txtNoEvent VISIBLE"); 
      txtNoData.setVisibility(View.VISIBLE); 
      listViewSearch.setVisibility(View.GONE); 
     } 
    } 

    if(flag == false) 
    { 
     if(pd != null) 
     { 
      Log.v(TAG, "onPostExecute pd not null"); 
      if(pd.isShowing()) 
      { 
       Log.v(TAG, "onPostExecute pd is showing"); 
       pd.dismiss(); 
      } 
     } 
    } 
    else 
    { 
     listViewSearch.onRefreshComplete(); 
    } 
}//onPostExecute 
} 

검색 방법

protected void search(String term, boolean result) 
{ 
    listMainMenu.setVisibility(View.GONE); 
    //listViewSearch.setVisibility(View.VISIBLE); 
    new GetSearchAsyncTask(term, MainCategory.this, listViewSearch , txtNoData, "MainCategory", result).execute(); 
}//search 

답변

5

이전에 XML의 가시성을 gone으로 설정하고 Java 코드에서 VISIBLE으로 지정했습니다. 그 당시리스트는 나타나지 않았다. XML 레이아웃 파일에서 가시성 속성을 제거하고 자바 코드로 setVisibility()으로 설정하면 완벽하게 작동합니다. 나는 그 이유를 알 수 없었다. 도서관의 구현을 살펴보고 어디서 잘못되었는지 찾아야합니다. 그러나, 당분간 이것은 나를 위해 일한 것입니다.

관련 문제