0

こんにちは、リストビュー、オートコンプリートテキストビューを持つアクティビティがあります。ユーザーがエントリを入力すると、リストビューがフィルタリングされます。文字列配列からアイテムをクリックすると、意図したアクティビティに到達しません。以下の私のコードを確認してください:

private AutoCompleteTextView tv;
ArrayList<String> classesList = new ArrayList<String>( Arrays.asList( classes ) );

int textlength = 0;

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

lv = ( ListView ) findViewById( R.id.lvFruits );
    lv.setTextFilterEnabled(true);

    lv.setAdapter( new MyCustomAdapter( classes, imagesID ) );
    lv.setOnItemClickListener( this );

    ArrayAdapter<String> adapter = new ArrayAdapter<String>( this, R.layout.my_list_item, classesList );  

    tv = (AutoCompleteTextView) findViewById (R.id.txtSearchFruit);
    tv.setThreshold( 1 );
    tv.setAdapter( adapter );
    tv.setTextColor( Color.BLACK );


/**
     * Enabling Search Filter
     * */
    tv.addTextChangedListener(new TextWatcher() {
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
                textlength = tv.getText().length();
                text_sort.clear();
                image_sort.clear();

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

                lv.setAdapter(new MyCustomAdapter
                         (text_sort, image_sort));
        }
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub
        }
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }
    });

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    // TODO Auto-generated method stub
    String selected = classes[lv.getFirstVisiblePosition()+position];

    if( selected.equals("Apple") ){
        Intent apple = new Intent(Fruits.this, Apples.class);
        startActivity(apple);
    }
    else if( selected.equals("Apricot") ){
        Intent apricot = new Intent(Fruits.this, Apricots.class);
        startActivity(apricot);
    }
    else if( selected.equals("Avocado") ){
        Intent avocado = new Intent(Fruits.this, Avocado.class);
        startActivity(avocado);
    }
}

final String[] classes = new String[] { 
        "Apple", // #0
        "Apricot", // #1
        "Avocado" // #2 }

何が起こっているかというと、私がアボカドを選んだとき、それはリンゴの活動に行くということです. どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

1

ユーザーがエントリを入力すると、リストビューがフィルタリングされます。文字列配列からアイテムをクリックすると、意図したアクティビティに到達しません。

positionListView をフィルタリングすると、インデックスが変更されるため、から正しい行をフェッチすることに依存することはできませんclasses。行の単語を取得するだけです。

String selected = ((TextView) v).getText().toString();

アイテムの一意のアクティビティを作成したようですclasses... これは大変な作業です。ユーザーの選択に応じて適切なデータをロードできる汎用クラスを 1 つ作成するようにしてください。このアプローチは、作成がはるかに高速で、保守が容易です。

于 2013-01-26T16:23:14.693 に答える
0

このエラーを解決するには、これを使用します

tv.setThreshold( 2 );

これの代わりに

tv.setThreshold( 1 );

編集 :

アイテムの選択には、この最も簡単な方法を使用してください。

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    // TODO Auto-generated method stub

    if(classes[position].compareTo("Apple")==0){
        Intent apple = new Intent(Fruits.this, Apples.class);
        startActivity(apple);
    }
     if(classes[position].compareTo("Apricot")==0){
        Intent apricot = new Intent(Fruits.this, Apricots.class);
        startActivity(apricot);
    }
     if(classes[position].compareTo("Avocado")==0){
        Intent avocado = new Intent(Fruits.this, Avocado.class);
        startActivity(avocado);
    }
}
于 2013-01-26T16:16:07.027 に答える