2

アプリのリスト ビューを更新するために、プルの Chris Banes 実装を使用しました。問題は、リスト ビューの表示を非表示または非表示に設定し、それを Java コードで表示すると、リストが表示されないことです。一方、可視性を可視に設定するか、可視性を設定しないと、すべてが正常に機能します。私の要件は、同じアクティビティに 2 つのリスト ビューがあることです。サーバーからデータを取得すると、最初に表示されるように可視性を設定する必要があります。もう1つは検索機能に表示されます。検索結果のリストビューの可視性を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 レイアウト ファイルから可視性属性を削除し、setVisibility()を使用して Java コードでのみ設定すると、完全に機能しました。この背後にある理由を理解できませんでした。おそらく、ライブラリの実装を調べて、どこで間違ったのかを見つける必要があります。しかし、当分の間、これは私にとってうまくいったことです。

于 2013-02-21T17:24:35.723 に答える