Сокращение кода в Android Studio [дубликат]

282
29 октября 2017, 17:32

На данный вопрос уже ответили:

  • Сокращение кода String в if 2 ответа

Как сократить данный код?
Или как сделать парсер данных (вопрос - ответ) из локального .html/txt файла, в котором будет например данное содержимое meow - wow, stack - overflow и т.д.? (Приложение будет черпать данные из файла)

MainActivity.java

public class MainActivity extends AppCompatActivity  implements TextWatcher {
EditText editText;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    editText=findViewById(R.id.editText);
    textView=findViewById(R.id.textView);
    editText.addTextChangedListener(this);
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    if(charSequence.toString().equals("meow")) textView.setText("wow");
    if(charSequence.toString().equals("stack")) textView.setText("overflow");
    if(charSequence.toString().equals("bang")) textView.setText("boom");
    if(charSequence.toString().equals("hello")) textView.setText("bye");
    if(charSequence.toString().equals("meow")) textView.setText("wow");
}
@Override
public void afterTextChanged(Editable editable) {
}
}
Answer 1

Самое просто решение - объявить таблицу:

private static Map<String, String> mTexts = new HashMap<String, String>() {
    private static final long serialVersionUID = 3400090779728367346L;
    {
        put("meow", "wow");
        put("stack", "overflow");
    }
};
private static String getText(String key) {
    return mTexts.get(key);
}

И тогда onTextChanged будет таким:

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    String text = getText(charSequence.toString());
    if(text != null)
        textView.setText(text);
}

Решение получше:

  1. Создать в ресурсах xml файл соотношений имя-значение.
  2. Метод getText вместо обращения к Map будет обращаться к этому файлу и брать значение по имени:

       public static String getText(Context context, String key) {
            Resources res = context.getResources();
            return res.getString(res.getIdentifier(key, "string", context.getPackageName()));
        }
  3. onTextChanged теперь будет таким:

       @Override
       public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String text = getText(this, charSequence.toString());
            if(text != null)
                textView.setText(text);
       }
READ ALSO
Семафор с очередью

Семафор с очередью

есть семафор:

279
scroll списка пользователей

scroll списка пользователей

Новичок в андройд-разработке, мне нужно сделать скролл списка пользователей в виде плитки, чтобы "за раз" было видно 6 пользователейПодскажите,...

237
Gradle не видит сторонние библиотеки

Gradle не видит сторонние библиотеки

Обновил Gradle и он перестал видеть две сторонние библиотеки, которые были добавлены через "File dependency" (те

221