SORU
5 ŞUBAT 2014, ÇARŞAMBA


Uygulama eylem bar SearchView

arrayList<String> SearchView oluşturmam gerekiyor ve bu aynı açılır listesinde önerileri göster

enter image description here

SearchView bir eylem bir bar kurmak için nasıl adım adım açıklayan öğreticiler için sabırsızlanıyorum.

Belgeleri 28* *ve örnek google aşağıdaki okudum ama bana yararlı olmadı.

Arama oluşturun

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@ id/action_search"
          android:title="Search"
          android:icon="@android:drawable/ic_menu_search"
          android:showAsAction="always"
          android:actionViewClass="android.widget.SearchView" />
</menu>`

Ama dizeler dizisi parametrelerini ayarlamak için nasıl bilmiyorum. Farklı bir Aktivite sonucu almak ama iş yapmıyorum.

CEVAP
10 Mart 2014, PAZARTESİ


Birlikte bunun için bir çözüm koymak için biraz zaman aldı, ama bu sizin anlattığınız şekilde işe almak için en kolay yolu bulmuş. Bunu yapmanın daha iyi yolları olabilir, ancak etkinlik kodu yazmadın beri doğaçlama ve aktivite başlangıcında böyle bir liste olduğunu varsayalım gerekecek:

private List<String> items = db.getItems();

ExampleActivity.java

private List<String> items;

private Menu menu;

@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.example, menu);

    this.menu = menu;

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

        SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

        SearchView search = (SearchView) menu.findItem(R.id.search).getActionView();

        search.setSearchableInfo(manager.getSearchableInfo(getComponentName()));

        search.setOnQueryTextListener(new OnQueryTextListener() { 

            @Override 
            public boolean onQueryTextChange(String query) {

                loadHistory(query);

                return true; 

            } 

        });

    }

    return true;

}

// History
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void loadHistory(String query) {

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

        // Cursor
        String[] columns = new String[] { "_id", "text" };
        Object[] temp = new Object[] { 0, "default" };

        MatrixCursor cursor = new MatrixCursor(columns);

        for(int i = 0; i < items.size(); i  ) {

            temp[0] = i;
            temp[1] = items.get(i);replaced s with i as s not used anywhere.

            cursor.addRow(temp);

        }

        // SearchView
        SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

        final SearchView search = (SearchView) menu.findItem(R.id.search).getActionView();

        search.setSuggestionsAdapter(new ExampleAdapter(this, cursor, items));

    }

}

Şimdi bir adaptör CursorAdapter genişletilmiş oluşturmanız gerekir:

ExampleAdapter.java

public class ExampleAdapter extends CursorAdapter {

    private List<String> items;

    private TextView text;

    public ExampleAdapter(Context context, Cursor cursor, List<String> items) {

        super(context, cursor, false);

        this.items = items;

    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {

        text.setText(items.get(cursor.getPosition()));

    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View view = inflater.inflate(R.layout.item, parent, false);

        text = (TextView) view.findViewById(R.id.text);

        return view;

    }

}

Daha iyi bir yolu bunu yapmak için ise listenizi veri bir veritabanı, iletebilirsiniz Cursor tarafından döndürülen veritabanı fonksiyonları doğrudan ExampleAdapter ve kullanımı ile ilgili sütun seçiciyi görüntülemek için sütun metin TextView başvurulan adaptörü.

Lütfen unutmayın: CursorAdapter destek Android sürümü alma sakın aldığınızda, standart android.widget.CursorAdapter ithalat yerine.

Adaptörü de özel bir düzen gerektirir:

res/layout/item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:id="@ id/item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

Şimdi düzeni için ek metin veya resim görünümleri ekleme ve adaptör veri ile doldurma tarafından liste öğeleri özelleştirebilirsiniz.

Bu her yerde olabilir, ama bunu yapmadın eğer zaten SearchView bir menü öğesi gerekir:

res/menu/example.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@ id/search"
        android:title="@string/search"
        android:showAsAction="ifRoom"
        android:actionViewClass="android.widget.SearchView" />

</menu>

Sonra aranabilir bir yapılandırma oluşturun:

res/xml/searchable.xml

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/search"
    android:hint="@string/search" >
</searchable>

Son olarak bildirim dosyasında İlgili etkinlik etiketi içinde bu ekleyin:

AndroidManifest.xml

<intent-filter>
    <action android:name="android.intent.action.SEARCH" />
</intent-filter>

<meta-data
    android:name="android.app.default_searchable"
    android:value="com.example.ExampleActivity" />
<meta-data
    android:name="android.app.searchable"
    android:resource="@xml/searchable" />

Lütfen dikkat: @string/search dize örneklerde kullanılan tanımlanmış olmalıdırvalues/strings.xmlayrıca proje için com.example başvuru güncellemek için unutma.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AutoStream's Garage419

    AutoStream's

    15 EKİM 2007
  • Tek Syndicate

    Tek Syndicat

    23 Temmuz 2008
  • tychoadragmire

    tychoadragmi

    20 Mart 2006