2

textview / autocompletetextview、listview、ボタンがあるアクティビティを作成しています。私のautocompletetextviewはうまく機能しますが、textviewに入力したものをリストビューにインデックス付けしたいと思います。それが強調表示されたら、ボタンをクリックして対応するアクティビティに移動します。

これまでに私が行ったことは次のとおりです。

String[] classes = { 
        "Acornsquash", 
        "Almonds", 
        "Apples", }

private ListView lv;


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature( Window.FEATURE_LEFT_ICON );
    setContentView(R.layout.nutritional_list);
    setFeatureDrawableResource( Window.FEATURE_LEFT_ICON, R.drawable.nutrition32 );

    //ArrayAdapter<String> adapter = new ArrayAdapter<String>( this, 
    //      android.R.layout.simple_dropdown_item_1line, classes );
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.my_list_item, classes );    

    AutoCompleteTextView tv = ( AutoCompleteTextView ) findViewById ( R.id.txtSearcEngine );

    tv.setThreshold( 3 );
    tv.setAdapter( adapter );
    tv.setTextColor( Color.BLACK );

    lv = ( ListView ) findViewById(R.id.lvListSearch);
    lv.setAdapter(new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, classes ) );
    lv.setOnItemClickListener( this );


public void onItemClick( AdapterView<?> parent, View v, int position, long id ) {

    lv.setSelection(position);

    switch( position )
    {
    case 0:
        Intent acorn = new Intent( Nutritional_List.this, AcornSquash.class );
        startActivity( acorn );
        break;
    case 1:
        Intent almonds = new Intent( Nutritional_List.this, Almonds.class );
        startActivity( almonds );
        break;

私の問題は、autocompletetextviewからlistviewへの提案のインデックスを作成する方法がわからないことです。何か助けはありますか?ありがとう。

4

1 に答える 1

4

リライト

私はあなたが望むことを達成するために2つの方法を投稿しています。最初の方法はコーディングが簡単で、使用するのが簡単だと思います。2番目の方法はあなたの質問への直接の答えです。


方法
1AutoCompleteTextViewとListViewの両方が同じ情報を提供しているときに、それらを使用しているのは不思議です。AutoCompleteTextViewには、ユーザーのテキストに基づいて選択範囲をフィルタリングするという利点がありますが、ListView自体をフィルタリングする単純なEditTextを追加することで、AutoCompleteTextViewとButtonを削除できます。

EditText edit = (EditText) findViewById(R.id.edit);
edit.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        adapter.getFilter().filter(s);
    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    public void afterTextChanged(Editable s) {}
});

、などのadapterクラス変数はどこにあり、アダプタはに渡されます:lvtvlv

adapter = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, classes );
lv.setAdapter(adapter);

方法2
最初に質問したことを行うために、まずclasses、より強力なものに変更しましょうArrayList<String>

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

public void onCreate() {
    ...
    // Update both of your adapters!
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.my_list_item, classesList );    

新しいクラス変数をとして作成しますint tvIndex = -1。AutoCompleteTextViewからアイテムをクリックするときに使用します。

tv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        String text = ((TextView) v).getText().toString();
        tvIndex = classesList.indexOf(text);
        lv.setSelection(tvIndex);
    }
});

ユーザーがボタンを押して続行する場合:

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if(tvIndex > -1)
            lv.performItemClick(lv.getChildAt(tvIndex), tvIndex, tvIndex);
    }
});

お役に立てば幸いです。

于 2012-09-05T20:25:11.220 に答える