2017-02-28 13 views
1

連絡先にはlistView、検索コンテンツにはEditTextを作成します。 ここに検索コードがあります。カスタムリストビューに検索機能を追加する

主な活動

EditText contactSearch = (EditText) findViewById(R.id.contactSearch); 
     contactSearch.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       contentAdapter.getFilter().filter(s); 
      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 

contentAdapterはBackgroundWorkerのAysnTask

から

public static ContentAdapter contentAdapter; 
// other code 
contentAdapter = new ContentAdapter(context, names, phones); 
      listView.setAdapter(contentAdapter); 

を拡張された別のファイルにこのクラスである別のクラスで定義されている静的変数であります私が作る上記のようにmainActivityクラスからアクセスしたいので静的変数です。
エラーはありませんが、検索機能が正しく動作しません。私は連絡先を検索しようとしますが、検索することはできません。私は問題が何であるか分からない。エラーはありませんが、検索は正常に動作していません。

UPDATEContentAdapterクラス

public class ContentAdapter extends ArrayAdapter<String> { 
private Context context; 
private String[] names; 
private String[] phones; 
public static Dialog dialog; 

ContentAdapter(Context ctx, String[] name, String[] phone){ 
    super(ctx, R.layout.contact_row,R.id.txtName,name); 
    context = ctx; 
    names = name; 
    phones = phone; 
    dialog = new Dialog(context); 
} 

private class ViewHolder{ 
    TextView name, phone; 
    ViewHolder(View view){ 
     name = (TextView) view.findViewById(R.id.txtName); 
     phone = (TextView) view.findViewById(R.id.txtPhoneNumber); 
     view.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(context, "Item click", Toast.LENGTH_SHORT).show(); 
       String phoneNumber = phone.getText().toString(); 
       String userName = name.getText().toString(); 
       //final Dialog dialog = new Dialog(context); 
       dialog.setContentView(R.layout.custom_dialog); 
       dialog.setTitle(userName); 
       EditText etxtContactNumber = (EditText) dialog.findViewById(R.id.etxtContactNumber); 
       etxtContactNumber.setText(phoneNumber); 
       dialog.show(); 
      } 
     }); 
    } 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    ViewHolder viewHolder = null; 
    if(row == null) { 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = layoutInflater.inflate(R.layout.contact_row, parent, false); 
     viewHolder = new ViewHolder(row); 
     row.setTag(viewHolder); 
    }else{ 
     viewHolder = (ViewHolder) row.getTag(); 
    } 

    viewHolder.name.setText(names[position]); 
    viewHolder.phone.setText(phones[position]); 

    return row; 
} 

}

+0

アダプタクラスで検索機能を有効にします。 – Piyush

+0

このコードが何らかの理由で機能しないのはなぜですか? –

答えて

0

アダプタでこのコードを使用してください。

public void filter(String charText) { 
     charText = charText.toLowerCase(Locale.getDefault()); 
     names.clear(); 
     if (charText.length() == 0) { 
      names.addAll(arraylist); 
     } else { 
      for (Names wp : arraylist) { 
       if (wp.toLowerCase(Locale.getDefault()) 
         .contains(charText)) { 
        names.add(wp); 
       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 
+0

しかし、editTextがメインアクティビティであるため、adpterクラスのeditTextにアクセスするにはどうすればいいですか? –

+0

contentAdapter.filter(s);このコードをonTextChanged内に追加します –

+0

このコードはまだ何かが不足しています – Piyush

関連する問題