根据EditText Android中的输入设置listview的位置

时间:2012-08-11 12:13:20

标签: android android-listview

我正在制作一本字典应用程序,我打算用很多单词。(约1 Lakh) 我将它与Word的含义一起呈现在列表中。

我正在使用自定义数组适配器来填充listView并在listview中充气自定义布局。

这是我的观点:

1>我有edittext,允许用户输入他们正在寻找的单词。 2 - ;一旦用户输入单词,例如 R ,我想设置列表视图的选择,其中第一个字母是R,一旦用户输入下一个工作,请说 RE ,列表视图位置应更改为列表位置,前两个字母为 RE

为了实现这一点,我已将addTextchanged Listner添加到edittext并过滤了适配器,但它无法正常工作。一旦我输入了一些空白的列表。

您能否建议我采用更好的方法或如何实施以下功能。

任何帮助都会受到高度赞赏。

非常感谢。

3 个答案:

答案 0 :(得分:1)

如果我正确理解您的要求,那么您希望通过根据键入的字母滚动列表来最小化用户在字典应用程序中必须执行的键入。
您可以使用自动完整文本视图代替编辑文本来获得相同的结果 当用户键入一些字母时,android将显示以这些单词开头的所有单词 并且当用户选择正确的单词时,列表可以滚动到该位置。 以下是此示例代码:

<?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" >

    <AutoCompleteTextView
        android:id="@+id/edit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:completionThreshold="3" />

</LinearLayout>

公共类AutoCompleteActivity扩展Activity实现OnItemClickListener {

private AutoCompleteTextView edit;

private static final String[] items={"lorem", "ipsum", "dolor",
    "sit", "amet", "consectetuer", "adipiscing", "elit", "morbi",
    "vel", "ligula", "vitae", "arcu", "aliquet", "mollis","etiam",
    "vel", "erat", "placerat", "ante", "porttitor", "sodales", 
    "pellentesque", "augue", "purus"};

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
    edit=(AutoCompleteTextView)findViewById(R.id.edit);
    edit.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line,
            items));

    edit.setOnItemClickListener(this);
}

@Override
public void onItemClick (AdapterView<?> parent, View v, int position, long Id)
{
    Toast.makeText(AutoCompleteActivity.this, items[position], Toast.LENGTH_SHORT).show();
    // scroll the list to the correct position
    //listView.setSelection(position);
}

}


这里使用autoCompleteText视图附加一个适配器,当用户输入时,它会在下拉列表中显示所有以这些字母开头的单词以及用户时 单击列表中的任何单词,调用onItemClick方法。

我希望这会有所帮助

答案 1 :(得分:0)

这是给你的两个建议 1 ,将Search InterfaceContent Provider一起使用。这种方式有点复杂,但对于管理器大数据更有效。此Dictionary sample提供了两个搜索选项
  - 使用匹配项键入关键字和建议列表视图下拉列表。你只需点击并获得单词的含义   - 输入完整关键字并按放大镜图标,返回相对匹配项目列表视图。

您可以在Create a sample project下载示例并导入或Eclipse,然后选择SearchableDictionary示例。

2 ,坚持Edittext并过滤ListView。添加您的代码,以便我们为您提供帮助。

我认为AutoCompleteTextView ListView以下UserAutoCompleteTextView不方便。您曾建议下拉列表视图(在AutoCompleteTextView中),用户希望在单击建议时获取单词的含义,而不是在下面的ListView中再次单击(两次单击以获取单词的含义)。具有TextView显示单词含义的{{1}}似乎合适。

答案 2 :(得分:0)

public class SearchableDictionary extends Activity {

    private TextView mTextView;
    private ListView mListView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mTextView = (TextView) findViewById(R.id.text);
    mListView = (ListView) findViewById(R.id.list);

    Intent intent = getIntent();

    if (Intent.ACTION_VIEW.equals(intent.getAction())) {
        // handles a click on a search suggestion; launches activity to show word
        Intent wordIntent = new Intent(this, WordActivity.class);
        wordIntent.setData(intent.getData());
        startActivity(wordIntent);
        finish();
    } else if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        // handles a search query
        String query = intent.getStringExtra(SearchManager.QUERY);
        showResults(query);
    }
}

/**
 * Searches the dictionary and displays results for the given query.
 * @param query The search query
 */
private void showResults(String query) {

    Cursor cursor = managedQuery(DictionaryProvider.CONTENT_URI, null, null,
                            new String[] {query}, null);

    if (cursor == null) {
        // There are no results
        mTextView.setText(getString(R.string.no_results, new Object[] {query}));
    } else {
        // Display the number of results
        int count = cursor.getCount();
        String countString = getResources().getQuantityString(R.plurals.search_results,
                                count, new Object[] {count, query});
        mTextView.setText(countString);

        // Specify the columns we want to display in the result
        String[] from = new String[] { DictionaryDatabase.KEY_WORD,
                                       DictionaryDatabase.KEY_DEFINITION };

        // Specify the corresponding layout elements where we want the columns to go
        int[] to = new int[] { R.id.word,
                               R.id.definition };

        // Create a simple cursor adapter for the definitions and apply them to the ListView
        SimpleCursorAdapter words = new SimpleCursorAdapter(this,
                                      R.layout.result, cursor, from, to);
        mListView.setAdapter(words);

        // Define the on-click listener for the list items
        mListView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // Build the Intent used to open WordActivity with a specific word Uri
                Intent wordIntent = new Intent(getApplicationContext(), WordActivity.class);
                Uri data = Uri.withAppendedPath(DictionaryProvider.CONTENT_URI,
                                                String.valueOf(id));
                wordIntent.setData(data);
                startActivity(wordIntent);
            }
        });
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return false;
    }
}

}