0

「ルート、トップ、ダウン」を含む 3 つのリストがあります。しかし、「トップ」でリストをフィルタリングしてからリストをクリックすると、「ルート」が表示されます。フィルタリングに応じてクリック可能なリストにするにはどうすればよいですか?

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>

リストビュー.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>

4

1 に答える 1

0

問題はあなたonItemClickListenerの中にあります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と、ListView1 つのアイテムのみが表示されます。この項目をクリックすると、onItemClickがトリガーされます。クリックしたアイテムは新しいfilteredの最初の位置にあるためListView、変数positionは0です。最初のアイテムArray text[]は「ROOT」であるため、RootActivityが開始されます。

解決

クリックしたビューをアダプターに問い合わせて、それを文字列と比較します。

あなたの中にonItemClicked(..)

View selectedView = yourAdapter.getItemAtPosition(position)
TextView myText = (TextView) selectedView.findViewById(R.id.TextView01).getText() 

if(myText.equals("ROOT")){
   // start Activity..
于 2012-06-26T13:45:49.257 に答える