0

기본 Android 기능을 사용하는 간단한 SearchActivity이 있습니다.SearchActivity 맞춤 제안 : 어댑터가 새로 고침되지 않습니다.

그러나 mail_layoutListView에 표시 할 '이전 검색'제안을 사용자 정의했습니다.

문제

제거 및 값 또한 실시간으로 상기 UI에 표시되지 않는다. 액티비티가 다시 생성되면 표시됩니다. 내가 시도 무엇

:

  1. 다시 커서를 가져 오기 및 어댑터에 퍼팅.

  2. adapter.notifyDatasetChanged()

  3. 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 }); 
    } 

} 

답변

0

:

을 수행합니다. 활동 launchMode = "singleTop"

b. ContentObserver를 등록하고 onChange 메소드 내부에서 다음을 수행했습니다.

 handler.post(new Runnable() { 
      @Override 
      public void run() { 
       Log.v("Deep", "Inside ContentObserver : NofityDataSetChange Called "); 
       cursor = getContentResolver().query(uri, new String[]{"query"}, null, null, null); 
       simpleCursorAdapter.swapCursor(cursor); 
      } 
     }); 
관련 문제