2012-08-11 56 views
-1

我正在制作一个字典应用程序,我打算有很多单词(约1个拉赫) 我将它与Word的含义一起呈现在列表中。在EditText中设置基于输入的listview的位置Android

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

这里是我的scenarion:

1>我的EditText它允许用户输入他们正在寻找的话。 2>一旦用户键入单词,例如R,我想设置列表视图的Selction,其中第一个字母是R,并且一旦用户键入下一个工作,可以说RE,应该更改列表视图位置到前两个字母为RE的列表位置。

为了实现这一点,我添加了addTextchanged Listner到edittext并过滤了适配器,但它不起作用。一旦我输入了一些空的列表。

你可以请我建议我更好的方法或如何实现以下功能。

任何帮助将不胜感激。

非常感谢。

+0

检查这个环节一旦http://androiddevelopersblogs.blogspot.in/2012/06/custom-list-view-list-view-with-images.html – shassss 2012-08-11 12:25:51

回答

0

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

您可以下载样品和进口或Create a sample projectEclipse并选择SearchableDictionary示例。

,坚持Edittext和过滤器ListView。添加您的代码,以便我们可以帮助您。

在我看来AutoCompleteTextViewListView下面是不便于User。你曾建议下拉列表视图(在AutoCompleteTextView),用户期望在单击建议时不要再点击下面的ListView中的单词的含义(两次点击以获取单词的含义)。一个AutoCompleteTextViewTextView显示字的含义看起来很合适。

+0

你好,我最初开始与搜索接口开始实施。但是在管理数据方面丢失了一些地方。我想我会重新思考它并尝试这种方法,因为我可能会在一段时间后添加更多的支持。与listview和editext的问题是,我能够过滤适配器,但我不能够为自定义适配器做.....反正tahnkf的帮助和建议... – 2012-08-11 18:16:44

+0

@ YUL:我加入支持TTS以及..我有一个问题,如果我使用SearchInterface和Text To Speach,我将能够给予的最低操作系统支持是什么。 – 2012-08-11 18:44:46

+0

根据'Android Developer''TTS'支持最低API lvl4意味着Android1.6。只需将您的代码粘贴到paste.org或pastebin并攻击有问题的链接即可。我们会尽力帮助你。当你有时间时,转到搜索界面 – 2012-08-12 02:16:10

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延伸活动实现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方法被调用。

我希望这会有所帮助

+0

你好,自动完成TextView的是不是解决方案,因为我使用自定义适配器,我必须绑定列表.....感谢您的建议和帮助..我会使用搜索接口。 – 2012-08-11 18:19:39

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; 
    } 
} 

}

相关问题