0
기본 Android 기능을 사용하는 간단한 SearchActivity
이 있습니다.SearchActivity 맞춤 제안 : 어댑터가 새로 고침되지 않습니다.
그러나 mail_layout
의 ListView
에 표시 할 '이전 검색'제안을 사용자 정의했습니다.
문제
제거 및 값 또한 실시간으로 상기 UI에 표시되지 않는다. 액티비티가 다시 생성되면 표시됩니다. 내가 시도 무엇
:
다시 커서를 가져 오기 및 어댑터에 퍼팅.
adapter.notifyDatasetChanged()
adapter.swapCursor (커서)
어떻게 든 이들 중 어느 것도 제대로 작동하지 않습니다. 모든 제안을 환영합니다 :
SearchActivity 클래스 : 문제 발견
package com.example.deep_kulshreshtha.expandablelistnavdrawer;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.provider.SearchRecentSuggestions;
import android.support.v4.app.NavUtils;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.ResourceCursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.reflect.Array;
import java.util.Arrays;
public class SearchActivity extends AppCompatActivity {
static Uri uri = Uri.parse("content://" + MyContentProvider.AUTHORITY + "/suggestions");
Cursor cursor;
SimpleCursorAdapter simpleCursorAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
handleIntent(getIntent());
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
this.getSupportActionBar().setDisplayShowHomeEnabled(true);
cursor = getContentResolver().query(uri, new String[]{"query"}, null, null, null);
ListView listView = (ListView) findViewById(R.id.listView);
instantiateAdapter();
listView.setAdapter(simpleCursorAdapter);
}
private void instantiateAdapter(){
simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.previous_search, cursor,
new String[]{ "query" }, new int[] { R.id.previousSearchTextView },
CursorAdapter.NO_SELECTION);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent){
if(Intent.ACTION_SEARCH.equals(intent.getAction())){
String queryString = intent.getStringExtra(SearchManager.QUERY);
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
MyContentProvider.AUTHORITY, MyContentProvider.MODE);
suggestions.saveRecentQuery(queryString, null);
}
cursor = getContentResolver().query(uri, new String[]{"query"}, null, null, null);
instantiateAdapter();
simpleCursorAdapter.swapCursor(cursor);
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_menu, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setIconified(false);
searchView.setQueryHint(getString(R.string.search_activity_text));
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return true;
}
public void removeItem(View view){
TextView textView = (TextView) ((LinearLayout)view.getParent()).findViewById(R.id.previousSearchTextView);
String queryString = textView.getText().toString();
int deleted = getContentResolver().delete(uri, "query = ?", new String[]{ queryString });
}
}