2013-04-02 2 views
0

Привет, Все. Я думаю, что почти каждый знает «пример поискового словаря» для андроида. Мой вопрос: как я могу показать список слов из definition.txt на главном экране? Всем известно, что если один из нас нажимает кнопку поиска, он отображает часть записей из базы данных. Я хотел бы показать все записи в ListView на главной странице.Поисковый словарь: как отобразить список слов (listview)

Я новичок. Кто-нибудь может мне помочь??? Благодаря!

DictionaryDatabase.Java

public class WordActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.word); 

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 
     ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 

    Uri uri = getIntent().getData(); 
    Cursor cursor = managedQuery(uri, null, null, null, null); 

    if (cursor == null) { 
     finish(); 
    } else { 
     cursor.moveToFirst(); 

     TextView word = (TextView) findViewById(R.id.word); 
     TextView definition = (TextView) findViewById(R.id.definition); 

     int wIndex = cursor.getColumnIndexOrThrow(DictionaryDatabase.KEY_WORD); 
     int dIndex = cursor.getColumnIndexOrThrow(DictionaryDatabase.KEY_DEFINITION); 

     word.setText(cursor.getString(wIndex)); 
     definition.setText(cursor.getString(dIndex)); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); 
    } 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.search: 
      onSearchRequested(); 
      return true; 
     case android.R.id.home: 
      Intent intent = new Intent(this, SenseDictionary.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent); 
      return true; 
     default: 
      return false; 
    } 
} 
} 

DictionaryProvider.Java

public class DictionaryProvider extends ContentProvider { 
String TAG = "DictionaryProvider"; 

public static String AUTHORITY = "com.pesquisa.dicionario.searchabledict.DictionaryProvider"; 
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/dictionary"); 

public static final String WORDS_MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + 
               "/vnd.pesquisa.dicionario.searchabledict"; 
public static final String DEFINITION_MIME_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + 
                "/vnd.pesquisa.dicionario.searchabledict"; 

private DictionaryDatabase mDictionary; 

private static final int SEARCH_WORDS = 0; 
private static final int GET_WORD = 1; 
private static final int SEARCH_SUGGEST = 2; 
private static final int REFRESH_SHORTCUT = 3; 
private static final UriMatcher sURIMatcher = buildUriMatcher(); 

private static UriMatcher buildUriMatcher() { 
    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); 
    matcher.addURI(AUTHORITY, "dictionary", SEARCH_WORDS); 
    matcher.addURI(AUTHORITY, "dictionary/#", GET_WORD); 
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH_SUGGEST); 
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH_SUGGEST); 

    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT, REFRESH_SHORTCUT); 
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_SHORTCUT + "/*", REFRESH_SHORTCUT); 
    return matcher; 
} 

@Override 
public boolean onCreate() { 
    mDictionary = new DictionaryDatabase(getContext()); 
    return true; 
} 

@Override 
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, 
        String sortOrder) { 

    switch (sURIMatcher.match(uri)) { 
     case SEARCH_SUGGEST: 
      if (selectionArgs == null) { 
       throw new IllegalArgumentException(
        "selectionArgs must be provided for the Uri: " + uri); 
      } 
      return getSuggestions(selectionArgs[0]); 
     case SEARCH_WORDS: 
      if (selectionArgs == null) { 
       throw new IllegalArgumentException(
        "selectionArgs must be provided for the Uri: " + uri); 
      } 
      return search(selectionArgs[0]); 
     case GET_WORD: 
      return getWord(uri); 
     case REFRESH_SHORTCUT: 
      return refreshShortcut(uri); 
     default: 
      throw new IllegalArgumentException("Unknown Uri: " + uri); 
    } 
} 

private Cursor getSuggestions(String query) { 
    query = query.toLowerCase(); 
    String[] columns = new String[] { 
     BaseColumns._ID, 
     DictionaryDatabase.KEY_WORD, 
     DictionaryDatabase.KEY_DEFINITION, 
     SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID}; 

    return mDictionary.getWordMatches(query, columns); 
} 

private Cursor search(String query) { 
    query = query.toLowerCase(); 
    String[] columns = new String[] { 
     BaseColumns._ID, 
     DictionaryDatabase.KEY_WORD, 
     DictionaryDatabase.KEY_DEFINITION}; 

    return mDictionary.getWordMatches(query, columns); 
} 

private Cursor getWord(Uri uri) { 
    String rowId = uri.getLastPathSegment(); 
    String[] columns = new String[] { 
     DictionaryDatabase.KEY_WORD, 
     DictionaryDatabase.KEY_DEFINITION}; 

    return mDictionary.getWord(rowId, columns); 
} 

private Cursor refreshShortcut(Uri uri) { 

    String rowId = uri.getLastPathSegment(); 
    String[] columns = new String[] { 
     BaseColumns._ID, 
     DictionaryDatabase.KEY_WORD, 
     DictionaryDatabase.KEY_DEFINITION, 
     SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, 
     SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID}; 

    return mDictionary.getWord(rowId, columns); 
} 

@Override 
public String getType(Uri uri) { 
    switch (sURIMatcher.match(uri)) { 
     case SEARCH_WORDS: 
      return WORDS_MIME_TYPE; 
     case GET_WORD: 
      return DEFINITION_MIME_TYPE; 
     case SEARCH_SUGGEST: 
      return SearchManager.SUGGEST_MIME_TYPE; 
     case REFRESH_SHORTCUT: 
      return SearchManager.SHORTCUT_MIME_TYPE; 
     default: 
      throw new IllegalArgumentException("Unknown URL " + uri); 
    } 
} 

@Override 
public Uri insert(Uri uri, ContentValues values) { 
    throw new UnsupportedOperationException(); 
} 

@Override 
public int delete(Uri uri, String selection, String[] selectionArgs) { 
    throw new UnsupportedOperationException(); 
} 

@Override 
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { 
    throw new UnsupportedOperationException(); 
} 

} 

SenseDictionary.Java

public class SenseDictionary 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); 

    handleIntent(getIntent()); 
} 

@Override 
protected void onNewIntent(Intent intent) { 
    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 
    if (Intent.ACTION_VIEW.equals(intent.getAction())) { 
     Intent wordIntent = new Intent(this, WordActivity.class); 
     wordIntent.setData(intent.getData()); 
     startActivity(wordIntent); 
    } else if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     showResults(query); 
    } 
} 

private void showResults(String query) { 

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

    if (cursor == null) { 
     mTextView.setText(getString(R.string.no_results, new Object[] {query})); 
    } else { 
     int count = cursor.getCount(); 
     String countString = getResources().getQuantityString(R.plurals.search_results, 
           count, new Object[] {count, query}); 
     mTextView.setText(countString); 

     String[] from = new String[] { DictionaryDatabase.KEY_WORD, 
             DictionaryDatabase.KEY_DEFINITION }; 

     int[] to = new int[] { R.id.word, 
           R.id.definition }; 

     SimpleCursorAdapter words = new SimpleCursorAdapter(this, 
             R.layout.result, cursor, from, to); 
     mListView.setAdapter(words); 

     mListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       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.main, menu); 

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); 
    } 

    return true; 
} 

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

}

WordActivity.Java

public class WordActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.word); 

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 
     ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 

    Uri uri = getIntent().getData(); 
    Cursor cursor = managedQuery(uri, null, null, null, null); 

    if (cursor == null) { 
     finish(); 
    } else { 
     cursor.moveToFirst(); 

     TextView word = (TextView) findViewById(R.id.word); 
     TextView definition = (TextView) findViewById(R.id.definition); 

     int wIndex = cursor.getColumnIndexOrThrow(DictionaryDatabase.KEY_WORD); 
     int dIndex = cursor.getColumnIndexOrThrow(DictionaryDatabase.KEY_DEFINITION); 

     word.setText(cursor.getString(wIndex)); 
     definition.setText(cursor.getString(dIndex)); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); 
    } 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.search: 
      onSearchRequested(); 
      return true; 
     case android.R.id.home: 
      Intent intent = new Intent(this, SenseDictionary.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent); 
      return true; 
     default: 
      return false; 
    } 
} 
} 
+0

В каком файле вы помещаете этот код из ответа? – MrDoe777

ответ

2

Запустите поток и укажите путь к текстовому файлу.

private void loadWords() throws IOException { 
     Log.d(TAG, "Loading words..."); 
     final Resources resources = mHelperContext.getResources(); 
     InputStream inputStream = resources.openRawResource(R.raw.definitions); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 

     try { 
      String line; 
      while ((line = reader.readLine()) != null) { 
       reader.toString(); 
       String[] strings = TextUtils.split(line, "-"); 

       if (strings.length < 2) continue; 
       long id = addWord(strings[0].trim(), strings[1].trim()); 
       if (id < 0) { 
        Log.e(TAG, "unable to add word: " + strings[0].trim()); 
       } 
      } 
     } finally { 
      reader.close(); 
     } 
     Log.d(TAG, "DONE loading words."); 
    } 

после этого, если вы хотите, чтобы ваши собственные слова, чтобы отобразить, изменить содержимое файла definitions.txt, расположенное в Layout/необработанной папке.

+0

В какой файл помещаете этот код? – MrDoe777

Смежные вопросы