2

我已经使用Chris Banes 的 pull 实现来刷新我的应用程序的列表视图。问题是如果我将列表视图的可见性设置为消失或不可见并使其在 java 代码中可见,则列表不会显示。另一方面,如果我将其可见性设置为可见或不设置其可见性,则一切正常。我的要求是我在同一个活动中有两个列表视图。我必须设置可见性,因为一旦它从服务器获取数据,它就会首先出现。另一个将出现在搜索功能上。我已将搜索结果的列表视图的可见性设置为在 xml 代码中消失,并使其仅在获得搜索结果后可见。尽管使用了setVisibility()对于此列表视图,它永远不会显示屏幕。我也检查了服务器响应。它在 logcat 上显示搜索结果。

我在下面发布我的代码:

活动中的代码片段

//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
4

1 回答 1

5

早些时候,我在 XML asgone和 java 代码中设置了可见性,我正在制作VISIBLE. 那个时候,名单还没有出现。当我从 XML 布局文件中删除了可见性属性,并且只在 java 代码中使用setVisibility()设置它时,它工作得很好。我无法弄清楚这背后的原因。可能是,我需要看一下库的实现,以便找到我哪里出错了。但是,就目前而言,这对我有用。

于 2013-02-21T17:24:35.723 回答