2016-09-26 8 views
0

私の最初のアプリを作成しています。私は自分のアプリに検索機能を追加したい。私はインターネット上にある多くのソリューションを試しましたが、望みの結果を与えていません。アプリはリストビューをリサイクルしています。アプリで検索した後、単語をフィルタリングし、同じ単語を持つリスト項目を表示する必要があります。 これは、これはアダプタrecycleview listviewで検索するには

 public class WordAdapter extends ArrayAdapter<Word> { 
    public WordAdapter(Context context, ArrayList<Word> words) { 
    super(context, 0, words); 


} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // Check if an existing view is being reused, otherwise inflate the view 
    View listItemView = convertView; 
    if (listItemView == null) { 
     listItemView = LayoutInflater.from(getContext()).inflate(
       R.layout.list_item, parent, false); 
    } 


    Word currentWord = getItem(position); 


    TextView searchTextView = (TextView) listItemView.findViewById(R.id.text1); 

    searchTextView.setText(currentWord.getWordSearch()); 

    ImageView imageView = (ImageView) listItemView.findViewById(R.id.list_item_icon); 

    imageView.setImageResource(currentWord.getImageId()); 




    return listItemView; 
} 
} 

であり、これはこれはlist_itemxml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:gravity="center_vertical" 
android:orientation="horizontal" 

android:minHeight="70dp" 
> 




<ImageView 
    android:id="@+id/list_item_icon" 
    android:layout_width="55dp" 
    android:layout_height="55dp" 
    android:layout_marginLeft="15dp"/> 

<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="50dp" 
    android:id="@+id/textContainer" 
    android:layout_weight="1" 
    android:orientation="vertical" 
    android:paddingLeft="16dp"> 

    <TextView 
     android:id="@+id/text1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:paddingTop="15dp" 
     android:textStyle="bold" 
     android:textColor="@android:color/black" 
     android:textAppearance="?android:textAppearanceMedium" 

     /> 




</LinearLayout> 

ですword.java

public class Word { 


private int mStringId; 
private int mImageId; 



private String mWordSearch; 


public Word(String wordSearch, int stringId , int imageId) { 

    mWordSearch = wordSearch; 
    mStringId = stringId; 
    mImageId = imageId; 

} 


public String getWordSearch() { 
    return mWordSearch; 
} 

public int getImageId(){ 
    return mImageId; 

} 

public int getStringId(){ 
    return mStringId; 

} 


} 

である私のMainActivity

public class MainActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.word_list); 


    final ArrayList<Word> words = new ArrayList<Word>(); 



    words.add(new Word("nine" , R.string.nine, R.drawable.a)); 
    words.add(new Word("one" , R.string.one , R.drawable.a)); 
    words.add(new Word("two" , R.string.two , R.drawable.a)); 
    words.add(new Word("three" , R.string.three,R.drawable.a)); 
    words.add(new Word("four" , R.string.four , R.drawable.a)); 
    words.add(new Word("five" , R.string.five, R.drawable.a)); 
    words.add(new Word("six" , R.string.six , R.drawable.a)); 
    words.add(new Word("seven" , R.string.seven ,R.drawable.a)); 
    words.add(new Word("eight" , R.string.eight , R.drawable.a)); 
    words.add(new Word("nine" , R.string.nine, R.drawable.a)); 
    words.add(new Word("one" , R.string.one , R.drawable.a)); 
    words.add(new Word("two" , R.string.two , R.drawable.a)); 
    words.add(new Word("three" , R.string.three,R.drawable.a)); 
    words.add(new Word("four" , R.string.four , R.drawable.a)); 
    words.add(new Word("five" , R.string.five, R.drawable.a)); 
    words.add(new Word("six" , R.string.six , R.drawable.a)); 
    words.add(new Word("seven" , R.string.seven ,R.drawable.a)); 
    words.add(new Word("eight" , R.string.eight , R.drawable.a)); 
    words.add(new Word("nine" , R.string.nine, R.drawable.a)); 


    final WordAdapter adapter = new WordAdapter(this , words); 

    ListView listView = (ListView) findViewById(R.id.list); 

    listView.setAdapter(adapter); 



    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView , View view, 
           int position, long l) { 
      Word word = words.get(position); 
      int ray = word.getStringId(); 
      Intent i = new Intent(MainActivity.this , DisplayActivity.class); 
      i.putExtra("my key" , getString(ray)); 
      startActivity(i); 


     } 
    }); 


} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_home, menu); 
    // Retrieve the SearchView and plug it into SearchManager 
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search)); 
    SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 


    return true; 


} 






} 

です

+0

検索を実行するとどうなりますか?あなたはそれが "望ましい結果を与えていない"と言っています - 期待される機能は何か、どんなエラー/問題が発生していますか?これらの詳細は、プロジェクトのソースコード全体を投稿するよりも役立ちます。 – ishmaelMakitla

+0

searchViewの実装方法はわかりません。解決策はありますが、私はそれらを理解することができません。コードを調べて、searchviewを追加する方法を教えてください、ありがとうございます – NicolasWRefn

答えて

0

ここでは、リサイクルリストビューを検索メカニズムで表す標準的で簡単な例を示します。

https://github.com/Wrdlbrnft/Searchable-RecyclerView-Demo

私は私のアプリで同じ適用され、それが最新の状態に動作します。

私はそれがあなたに役立つことを願っています。

+0

ああ、2日から私はそれを実装しようとしています。しかし、使用しないでください。私はプログラミングに慣れていません。私は上記のgithubコードとその説明を理解することができません。その長すぎると複雑な私は検索機能を追加することができます他の方法です – NicolasWRefn

+0

これは私があなたに与えた唯一の最も単純な例です... –

関連する問題