2012-08-11 91 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; 
    } 
} 

}

相關問題