2017-08-24 7 views
2

フィルタリストのデータをリストビューで検索するとうまくいきますが、フィルタリストのデータをクリックしたときに、 、私はBを検索し、リストにB、Cのデータは、その細かい作業が、私はBをクリックすると、事前にここに私のコードフィルタリストビューは、アイテムをクリックすると正しい位置を取得しません

@Override 
public int getCount() { 
    return models.size(); 
} 

@Override 
public Object getItem(int position) { 
    return models.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (convertView == null) { 
     convertView = View.inflate(context, R.layout.listitem, null); 
    } 

    ImageView images = (ImageView) convertView.findViewById(R.id.imageView); 
    TextView title = (TextView) convertView.findViewById(R.id.name); 
    TextView about = (TextView) convertView.findViewById(R.id.desc); 
    RatingBar ratingBar= (RatingBar) convertView.findViewById(R.id.rating); 

    Restaurantmodel model = models.get(position); 
    images.setImageResource(model.getImage()); 
    title.setText(model.getTitle()); 
    about.setText(model.getAbout()); 
    ratingBar.setRating(ratings[position]); 
    return convertView; 
} 


@Override 
public Filter getFilter() { 
    if(filter == null) 
    { 
     filter=new CustomFilter(); 
    } 
    return filter; 
} 

class CustomFilter extends Filter { 

    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     FilterResults results = new FilterResults(); 

     if (constraint != null && constraint.length() > 0) { 
      constraint = constraint.toString().toUpperCase(); 
      ArrayList<Restaurantmodel> filters = new ArrayList<Restaurantmodel>(); 
      for (int i = 0; i < filterList.size(); i++) { 
       if (filterList.get(i).getTitle().toUpperCase().contains(constraint.toString().toUpperCase())) { 
        Restaurantmodel R = new Restaurantmodel(filterList.get(i).getImage(), filterList.get(i).getTitle(), filterList.get(i).getAbout()); 
        filters.add(R); 
       } 
      } 
      results.values=filters; 
      results.count=filters.size(); 

     } 
     else 
     { 
      results.values=filterList; 
      results.count=filterList.size(); 

     } 
     return results; 
    } 

    @Override 
    protected void publishResults (CharSequence constraint, FilterResults results){ 
     models=(ArrayList<Restaurantmodel>) results.values; 
     notifyDataSetChanged(); 
    } 
} 


listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      if (position == 0) { 
       Intent myintent = new Intent(Restaurant.this, NOSHAKH.class); 
       myintent.putExtra("position",restaurantadapter.getItemId(position)); 
       startActivity(myintent); 
      } 
      if (position == 1) { 
       Intent intent = new Intent(Restaurant.this, Barbqtonite.class); 
       intent.putExtra("position", restaurantadapter.getItemId(position)); 
       startActivity(intent); 
      } 
     } 
    }); 
    svR = (SearchView) findViewById(R.id.searchViewxray); 
    svR.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextChange(String query) { 
       restaurantadapter.getFilter().filter(query); 
      return false; 
     } 
      @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

    }); 

答えて

0

「onItemClick」であるに感謝を助けてください活動ではないB活性を開く返しますフィルタリングされたリストからの要素の位置ですが、この位置を使用して元のリストから項目を取得します。次のようにしてください:

myintent.putExtra( "position"、initialList.indexOf(restaurantadapter.getItem(position))));

+0

この行のアプリケーションがクラッシュする –

+0

私のコードをテストしませんでした。エラーは何を言いますか? –

+0

あなたが私に何か解決策を見つけたら私はこの行を削除していませんでした –

関連する問題