簡體   English   中英

我無法在listview中添加搜索功能

[英]I can't add search feature to my listview

我的應用程序中有一個列表視圖,當我將搜索添加到我的列表視圖時,它根本不起作用。 當我將這些代碼添加到我的項目時,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();
    }
}

}

我的問題是這個代碼。

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

為什么getFilter()無法解決? 它是否適用於我的適配器? 請幫忙

為什么getFilter()無法解決?

因為Filterable接口未在VehicleAdapter類中實現。

調用adapter.getFilter().filter調用Activity usng Adapter對象需要在Adapter類中實現Filterable接口並覆蓋getFilter

請參閱以下示例如何使適配器可過濾:

Android過濾器自定義ListView(BaseAdapter)

在自定義適配器中它不起作用。 這個搜索代碼可以在SimpleAdapter中使用。 對於適配器,您必須編寫自定義代碼進行搜索。 按照此鏈接,它將根據您的需要(自定義adapetr中的搜索過濾器)

自定義Listview適配器與過濾Android

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM