У меня есть SearchActivity (расширяет ListActivity) и SearchAdapter, который будет извлекать результаты поиска. Я вижу в logcat, что cursor.getCount () увеличивается с каждым попаданием, а cursor.requery () возвращает true и даже getListView (). GetCount () увеличивается с каждым поисковым результатом, но ListView остается пустым. С каждым новым результатом поиска в моем адаптере также вызывается метод обновления.
Я понятия не имею, что еще может быть не так. Кто-нибудь еще здесь с такой проблемой когда-либо раньше?
public class SearchableActivity extends ListActivity implements Observer {
private static final String TAG = "SearchableActivity";
private Context mContext;
private SearchCursorAdapter mSearchAdapter;
private Uri cpUri;
private ListView mListView;
private Runnable updateUI;
private Handler handleRunnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
mContext = this;
mListView = getListView();
tvTitle.setText(getString(R.string.search_results));
cpUri = com.pd.database.MyProvider.CONTENT_URI.buildUpon().appendPath("searchresults").build();
Cursor cursor = this.managedQuery(cpUri, null, null, null, null);
mSearchAdapter = new SearchCursorAdapter(mContext, cursor);
mListView.setAdapter(mSearchAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent podcastDetails = new Intent(getApplicationContext(), MPDetails.class);
podcastDetails.putExtra("id", id);
startActivity(pDetails);
}
});
handleRunnable = new Handler();
updateUI = new Runnable() {
@Override
public void run() {
Log.d(TAG, "in Runnable()");
Log.d(TAG, "cursor.getCount() beforde: " + String.valueOf(mSearchAdapter.mCursor.getCount()));
Log.d(TAG, "requery returns: " + String.valueOf(mSearchAdapter.mCursor.requery()));
Log.d(TAG, "cursor.getCount() after: " + String.valueOf(mSearchAdapter.mCursor.getCount()));
Log.d(TAG, "count ListViewItems: " + String.valueOf(getListView().getCount()));
mSearchAdapter.notifyDataSetChanged();
}
};
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
searchForPodcasts(query);
}
}
private void searchForPD(String query) {
try {
URL searchURL = new URL(MDirectories.SEARCH+query);
RSSHandlerSearch searchHandler = new RSSHandlerSearch(mContext, cpUri);
searchHandler.addObserver(this);
UrlHandlerBar stuff = new UrlHandlerBar(mContext, searchURL, searchHandler, mProgressbar, cpUri, this);
new NetworkData().execute(stuff);
} catch (MalformedURLException e) {}
}
@Override
public void update(Observable observable, Object data) {
handleRunnable.post(updateUI);
}
}