2015-02-28 3 views
0

У меня есть список в моем приложении, и когда я добавляю поиск в свой список, он вообще не работает. Когда я добавляю этот код в свой проект, getfilter не разрешает.Я не могу добавить функцию поиска в свой список

enter code here 
public class MyActivity extends Activity { 



InputStream in; 
BufferedReader reader; 
String line = "1"; 
public ListView listView; 
VehicleAdapter adapter; 
ArrayList<String> dataItems = new ArrayList<String>(); 
public int star = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    G.currentActivity = this; 
    setContentView(R.layout.main); 
    // Adad.setTestMode(true); 
    ReadText(); 
    // String[] dataArray = dataItems.toArray(new String[0]); 
    //String[] dataArray = getResources().getStringArray(R.array.listdata); 
    //List<String> dataTemp = Arrays.asList(dataArray); 
    // dataItems.addAll(dataTemp); 
    listView = (ListView) findViewById(R.id.mainList); 
    EditText ed = (EditText) findViewById(R.id.editText1); 


    ArrayList<Bitmap> arr_bitmaps = new ArrayList<Bitmap>(4); 
    adapter = new VehicleAdapter(MyActivity.this, arr_bitmaps, dataItems); 
    listView.setAdapter(adapter); 
    listView.setTextFilterEnabled(true); 
    ed.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, 
            int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, 
             int arg2, int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable arg0) { 
      // vaghti kar bar harfi vared kard josteju mikone : 
      MyActivity.this.adapter.getFilter().filter(arg0); 
     } 
    }); 

} 

public class VehicleAdapter extends BaseAdapter { 
    ArrayList<String> arr_calllog_name = new ArrayList<String>(); 
    public Activity context; 
    ArrayList<Bitmap> imageId; 
    public LayoutInflater inflater; 

    public VehicleAdapter(Activity context, ArrayList<Bitmap> arr_bitmaps, ArrayList<String> arr_calllog_name) { 
     super(); 
     this.imageId = arr_bitmaps; 
     this.context = context; 
     this.arr_calllog_name = arr_calllog_name; 
     this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return arr_calllog_name.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    public class ViewHolder { 

     TextView txtName; 
     ImageButton btn; 


    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     final ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.child_listview, null); 
      holder.txtName = (TextView) convertView.findViewById(R.id.childTextView); 
      holder.btn = (ImageButton) convertView.findViewById(R.id.childButton); 
      convertView.setTag(holder); 
     } else 
      holder = (ViewHolder) convertView.getTag(); 


     holder.txtName.setText(PersianReshape.reshape(arr_calllog_name.get(position))); 

     Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/B Morvarid_YasDL.com.ttf"); 
     //holder.txtName.setTypeface(G.defaultFont); 
     holder.txtName.setTypeface(custom_font); 


     holder.btn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent sharingIntent = new Intent(Intent.ACTION_SEND); 
       sharingIntent.setType("text/plain"); 
       String shareBody = arr_calllog_name.get(position); 
       sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject Here"); 
       sharingIntent.putExtra(Intent.EXTRA_TEXT, shareBody); 
       startActivity(Intent.createChooser(sharingIntent, "Share via")); 
      } 
     }); 
     return convertView; 
    } 

} 

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

public boolean onOptionsItemSelected(MenuItem menuItem) { 

    if (menuItem.getItemId() == R.id.contact) { 
     Intent intent = new Intent(MyActivity.this, ContactUs.class); 
     startActivity(intent); 
    } 
    return super.onOptionsItemSelected(menuItem); 
} 

private void ReadText() { 
    try { 
     in = this.getAssets().open("text.txt"); 
     reader = new BufferedReader(new InputStreamReader(in)); 
     while (line != null) { 
      line = reader.readLine(); 
      if (line != null) 
       dataItems.add(line); 
      else 
       break; 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

}

мой broblem этот код.

enter code here 
MyActivity.this.adapter.getFilter().filter(arg0); 

Почему getFilter() не разрешает? Переводится ли он на мой адаптер? , пожалуйста, помогите

ответ

0

Почему getFilter() не разрешает?

Потому что интерфейс Filterable не реализован в классе VehicleAdapter.

Чтобы позвонить adapter.getFilter().filter для деятельности usng Объект адаптера должен реализовать интерфейс Filterable в классе адаптера и переопределить getFilter.

См следующего примера, как сделать адаптер фильтруемым:

Android Filter Custom ListView (BaseAdapter)

0

В пользовательском адаптере не будет работать. этот код для поиска будет работать в SimpleAdapter. Для вашего адаптера вам необходимо написать собственный код для поиска. Перейдите по этой ссылке он будет делать в соответствии с вашими потребностями (фильтра поиска в пользовательских adapetr)

Custom Listview Adapter with filter Android

Смежные вопросы