У меня 200 просмотров текста, и я хочу знать, какая из них была нажата, как изменить текст
У меня есть проблема... я думал об этом какое-то время и искал онлайн, но до сих пор не нашел четкого объяснения...
У меня есть несколько текстовых представлений, и я установил onClickListeners для каждого из них... и когда пользователь нажимает на одно из них, я хочу, чтобы у него была возможность изменить текст на другой набор параметров строкового массива, который я создал программно. Когда пользователь выбирает опцию, текст должен измениться на опцию, которую он выбирает. (Т.е. TextView был A, теперь это B. надеюсь, что это имеет смысл... в любом случае...)
Текущее решение состояло в том, чтобы установить OnClickListener для каждого TextView, и когда кто-то нажимал его, показывался отдельный диалог. Но я обнаружил, что если я сделаю это, код будет настолько длинным, что потребуется немало времени, чтобы кодировать, поэтому я надеюсь, что у кого-то есть более элегантный способ кодирования такого длинного процесса =(
Поэтому я предполагаю, что мой вопрос будет... 1) есть ли способ узнать, какое текстовое представление было нажато, а затем изменить текст этого TextView, который нажимается в одном методе? чтобы избавить меня от необходимости кодировать 1000 диалоговых окон предупреждений...
5 ответов
Я бы предложил сохранить текстовые представления в массиве, например так:
TextView[] textViewArray = new TextView[textViewCount];
Затем с помощью цикла for присвойте каждому тег целого числа - это позиция
textViewArray.setTag(i)
И добавьте onClickListener для каждого, снова используя цикл for:
textviewArray[i].setOnClickListener(etc...)
Затем, когда один из них щелкают, вы можете использовать получить позицию просмотра, который был нажат. Для этого потребуется собственный метод внутри вашего:
textviewArray.setOnClickListener(new customOnClickListener())
Где ваш customOnClickListner выглядит так:
private class customOnClickListener implements CompoundButton.{
public void OnClick(View view){
int position = (Integer) view.getTag()
///Do more code here - your processing
}
}
Надеюсь, что это имеет смысл:) Для ваших циклов for, вы можете использовать для (я = 0, я
Один из способов сделать то, что вы хотите, это использовать текстовое представление setTag()
а также getTag()
методы.
На init
текстового представления использовать setTag()
установить какое-то значение для идентификации вида.
В событии по нажатию используйте getTag()
на аргументе представления, чтобы узнать, какой вид был нажат.
Я бы посоветовал вам использовать вид сетки. Вы можете увидеть, какое текстовое представление было нажато так:
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
//get id
switch (v.getId()) {
case R.id.textView1: ...
}
});
Вы должны установить "onClickListner" для всех ваших текстовых представлений. Для сохранения некоторой длины кода я бы предложил вам создать функцию вашего диалогового окна и дать ей некоторый параметр int, который будет вызываться напрямую clickListener textview, Like,
int i=0;
......
textView1 = (TextView)findViewById(R.id.yourtextview1);
textView2 = (TextView)findViewById(R.id.yourtextview2);
......
......
// and so on, for your all textviews
@Override
public void onClick(View view) {
if (view.equals(textView1)) {
i = 1;
CustomDialog(i);
}
//Similarly for all your textViews..
..........
Сделать функцию CustomDialog Like
public void CustomDialog(int i){
if(i==1){
//Do something
}
}
Используйте набор идентификатора для всего текста, где задайте положительное целое число идентификатора (отличное), а затем один прослушиватель щелчков при просмотре (установите все), где вы перехватываете все щелчки текстового представления (пониженное представление с текстовым представлением), и в стороне он помещает переключатель случай, когда вы обрабатываете клики, по которым нажимается текстовое представление.