#android
#Android
Вопрос:
Я видел много вопросов и ответов в stack по этому поводу, но по какой-то причине они не работают в моем случае.
Я думаю, это может быть потому, что я работаю с элементами из представления напрямую.
Этот код работает;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void btnOnClickRegister(View view){
TextView txtEmail = findViewById(R.id.txtEmail);
EditText edtTxtEmail = findViewById(R.id.edtTxtEmail);
txtEmail.setText("Email " edtTxtEmail.getText().toString()); //hardcoded and will not translate
}
}
В strings.xml;
<string name="email">Email</string>
Я получаю следующее предупреждение;
Не объединяйте отображаемый текст с setText. Используйте строку ресурса с заполнителями.
Большинство вопросов и ответов решают это следующим образом;
getString(R.string.email, VarContainingEmail);
с XML, который выглядит следующим образом;
<string name="email">Email %s</string>
Если я попытаюсь это сделать, я получу следующее предупреждение;
Не удается разрешить метод ‘getString’ в ‘TextView’
Я только начинаю с Android studio и хотел бы решить эту проблему с самого начала.
Я использую Android Studio версии 4.0.1
Ответ №1:
Пожалуйста, попробуйте один раз таким образом, дайте мне знать, если не сработает
<string name="email">Email, %1$s!</string>
txtEmail.setText(getString(R.string.email, edtTxtEmail.getText().toString()));
Комментарии:
1. Я так и думал, но я получаю; Строка формата ’email’ не является допустимой строкой формата, поэтому ее не следует передавать в String.format
2. можете ли вы показать, как вы на самом деле пытаетесь использовать этот подход?
3. Я понял! Мне пришлось обновить все значения в файле res. Я обновлял только один, поэтому некоторые из них были недопустимой строкой. После обновления всех языков ошибка была исправлена.
4. Точно, @MadeInDreams пожалуйста, покажите, какие изменения вы внесли в код. Также укажите, находится ли этот код внутри фрагмента или действия. Если фрагмент используется
getContext()
для вызоваgetString()
. Если activity используетthis
для вызоваgetString()
Ответ №2:
Возможно, вам потребуется использовать контекст, чтобы получить доступ к getString:
context.getString(R.string.email, VarContainingEmail);
где может быть контекст this
, если вы находитесь в activity
Редактировать: Итак, если вы находитесь в представлении, допустим, это представление является переменной view
, вы можете использовать: view.getContext().getString(R.string.email, VarContainingEmail);
Комментарии:
1. Как мне объявить эту переменную и присвоить ей значение в моем контексте? Эта переменная не существует в моем контексте, потому что я считываю значение из представления.
2. в этом случае вы можете получить доступ к контексту, используя:
view.getContext()
, Я отредактировал свой ответ. Ваше представление может быть доступно с помощьюthis
, в этом случае вы могли бы использоватьthis.getContext()