0

私のアプリケーションでは、テキストビュー、イメージビュー、およびボタンを含むカスタム リストビューを作成しました。そのリストに json データを正常にロードできます。ここで、リストを並べ替えて、編集テキストによってフィルター処理されたアイテムのみを表示できるように、textwatcher を実装したいと考えています。

CustomList アクティビティのコード:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    lv = (ListView)findViewById(R.id.listView1);
    et1 = (EditText)findViewById(R.id.editText1);
    inflator = getLayoutInflater();
    et1.addTextChangedListener(this);
    JsonParser jParser = new JsonParser();
    JSONObject json = jParser.getJSONfromUrl(url);
    try
    {
        JSONArray explore = json.getJSONArray("explore");
        for(int i=0; i<explore.length(); i++)
        {
            JSONObject exp = explore.getJSONObject(i);
            list.add(exp.getString("username"));
        }
    }
    catch(JSONException e)
    {
        e.printStackTrace();
    }

    srchadptr = new SearchAdapter(this, inflator, list);
    lv.setAdapter(srchadptr);
}

public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub

}

public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    // TODO Auto-generated method stub

}

public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub
    srchadptr.getItem(start);
}

SearchAdapter クラス (BaseAdapter) のコード:

public class SearchAdapter extends BaseAdapter {

    Context context;
    LayoutInflater inflater;
    Button btn;
    View vw;
    ArrayList<String> list = new ArrayList<String>();

    public SearchAdapter(Context context,   LayoutInflater inflater, ArrayList<String> list) {
        // TODO Auto-generated constructor stub
        this.context = context;
        this.inflater = inflater;
        this.list = list;
    }

    /*public CharSequence filter(CharSequence cs) {
        return cs;
    }*/

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

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

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

    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        vw = inflater.inflate(R.layout.list_items, null);
        ImageView img = (ImageView)vw.findViewById(R.id.imageView1);
        TextView tv = (TextView)vw.findViewById(R.id.textView1);
        btn = (Button)vw.findViewById(R.id.button1);
        tv.setText(String.valueOf(list.get(position)));
        btn.setText(String.valueOf(list.get(position)));
        btn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(context, list.get(position), Toast.LENGTH_LONG).show();
            }
        });
        return vw;
    }
}

この SearchAdapter クラスにフィルターを実装する方法を教えてください...

前もって感謝します...

4

1 に答える 1

-1

解決に非常に近づいています。getView メソッドで次の変更を行います。

    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
       View view = super.getView(position, convertView, parent);

            LinearLayout vwParentRow = (LinearLayout) view;

            final EditText yourtextview= ((EditText) vwParentRow.getChildAt(2));
            //let say your edittext is 2nd in the  listview
            yourtextview.addTextChangedListener(yourtextchangelistener);
           ..........

        return view ;
    }
于 2012-09-15T06:48:47.113 に答える