如何使用searchbox获取自定义列表视图?

时间:2012-06-26 13:30:18

标签: android listview onclicklistener custom-lists

我有三个列表,其中包含“root,top和down”。 但是当我用“top”过滤列表时,然后我点击列表,出现的是“root”。如何根据我们过滤的可点击列表?

list.java

    public class root extends Activity {

EditText edittext;
ListView listview;

private String[] text = { "ROOT", "TOP", "DOWN" };

private int[] image = { R.drawable.root, R.drawable.top, R.drawable.down };

int textlength = 0;

ArrayList<String> text_sort = new ArrayList<String>();
ArrayList<Integer> image_sort = new ArrayList<Integer>();

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainlistview);

    this.getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

    edittext = (EditText) findViewById(R.id.EditText01);
    listview = (ListView) findViewById(R.id.ListView01);
    listview.setAdapter(new MyCustomAdapter(text, image));

    listview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            if ("ROOT".equals(text[position])) {
                Intent myIntent = new Intent(view.getContext(),
                        root.class);
                startActivityForResult(myIntent, 0);

            }
            if ("TOP".equals(text[position])) {
                Intent myIntent = new Intent(view.getContext(),
                        top.class);
                startActivityForResult(myIntent, 0);
            }
            if ("DOWN".equals(text[position])) {
                Intent myIntent = new Intent(view.getContext(),
                        down.class);
                startActivityForResult(myIntent, 0);

        }

    });

    edittext.addTextChangedListener(new TextWatcher() {

        public void afterTextChanged(Editable s) {

        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

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

            textlength = edittext.getText().length();
            text_sort.clear();
            image_sort.clear();

            for (int i = 0; i < text.length; i++) {
                if (textlength <= text[i].length()) {
                    if (edittext
                            .getText()
                            .toString()
                            .equalsIgnoreCase(
                                    (String) text[i].subSequence(0,
                                            textlength))) {
                        text_sort.add(text[i]);
                        image_sort.add(image[i]);
                    }
                }
            }

            listview.setAdapter(new MyCustomAdapter(text_sort, image_sort));

        }
    });
}

class MyCustomAdapter extends BaseAdapter {

    String[] data_text;
    int[] data_image;

    MyCustomAdapter() {

    }

    MyCustomAdapter(String[] text, int[] image) {
        data_text = text;
        data_image = image;
    }

    MyCustomAdapter(ArrayList<String> text, ArrayList<Integer> image) {

        data_text = new String[text.size()];
        data_image = new int[image.size()];

        for (int i = 0; i < text.size(); i++) {
            data_text[i] = text.get(i);
            data_image[i] = image.get(i);
        }

    }

    public int getCount() {
        return data_text.length;
    }

    public String getItem(int position) {
        return null;
    }

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

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

        LayoutInflater inflater = getLayoutInflater();
        View row;

        row = inflater.inflate(R.layout.listview, parent, false);

        TextView textview = (TextView) row.findViewById(R.id.TextView01);
        ImageView imageview = (ImageView) row
                .findViewById(R.id.ImageView01);

        textview.setText(data_text[position]);
        imageview.setImageResource(data_image[position]);

        return (row);

    }
}

}

main.xml中

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<EditText
    android:id="@+id/EditText01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Search" >
</EditText>

<ListView
    android:id="@+id/ListView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
</ListView>

listview.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#fff200"
android:gravity="left|center"
android:paddingBottom="5px"
android:paddingLeft="5px"
android:paddingTop="5px" >

<ImageView
    android:id="@+id/ImageView01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
</ImageView>

<TextView
    android:id="@+id/TextView01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10px"
    android:textColor="#0099CC"
    android:textSize="20px"
    android:textStyle="bold" >
</TextView>

1 个答案:

答案 0 :(得分:0)

问题出在onItemClickListener的{​​{1}}:

ListView

在您对listview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if ("ROOT".equals(text[position])) { Intent myIntent = new Intent(view.getContext(),class); startActivityForResult(myIntent, 0); 进行过滤后,您的ListView将仅显示1个项目。单击此项目时,ListView将被触发。由于您点击的项目位于新过滤的onItemClick的第一个位置,因此变量ListView为0. position中的第一项是“ROOT”,因此将启动RootActivity。

<强>解决方案

询问适配器您单击了哪个View并将其与String进行比较:

Array text[]内:

onItemClicked(..)