2

我正在创建一个活动,其中有 textview/autocompletetextview、listview 和一个按钮。我的自动完成文本视图运行良好,但我想将我在文本视图中输入的内容索引到列表视图,当它突出显示时,我会单击按钮并转到相应的活动。

到目前为止,这是我所做的:

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

改写

我发布了两种方法来完成你想要的。我相信第一种方法更容易编码并且使用起来更不容易混淆。第二种方法是直接回答您的问题。


方法 1
当 AutoCompleteTextView 和 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是类变量,如lv,tv等,以及传递给的适配器lv

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 回答