ListView как обработать нажатие кноки в строке?
ListView как обработать нажатие кноки в строке?
На основном экране имею ListView, которую заполняю данными из SQL базы, используя для соединения SimpleAdapter.
Данные подставляются в заранее подготовленную layout (там 3 поля TextView+кнопка)
В итоге получается ListView заполненная строками, каждая из которых состоит из 3х TextView и кнопки
мне надо по нажатию кнопки обработать соотвествующую TextView из этой же строки...
на одном из форумов нашел вот такой совет
"ListView имеет метод getChildAt. У адаптера есть getView. Получаем View контейнера строки, далее в нем делаем findViewById с id кнопки. Все. "
как его применить на практике не знаю, инфу найти не могу, помогите плз
Данные подставляются в заранее подготовленную layout (там 3 поля TextView+кнопка)
В итоге получается ListView заполненная строками, каждая из которых состоит из 3х TextView и кнопки
мне надо по нажатию кнопки обработать соотвествующую TextView из этой же строки...
на одном из форумов нашел вот такой совет
"ListView имеет метод getChildAt. У адаптера есть getView. Получаем View контейнера строки, далее в нем делаем findViewById с id кнопки. Все. "
как его применить на практике не знаю, инфу найти не могу, помогите плз
Re: ListView как обработать нажатие кноки в строке?
разберись с кастомным адаптером вначале. На стандартном это сделать нельзя. Уроки тут есть.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: ListView как обработать нажатие кноки в строке?
кастомный адаптер - имеешь ввиду создать отдельный класс под него и переопределить метод...
onClickListener (вроде так)?
попробую, а не может быть проблема из-за того что перерисовка ListView сделана в отдельной функции, чтобы ее можно было вызывать по требованию из других активностей?
onClickListener (вроде так)?
попробую, а не может быть проблема из-за того что перерисовка ListView сделана в отдельной функции, чтобы ее можно было вызывать по требованию из других активностей?
Код: Выделить всё
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
upd_lv_main();
}Код: Выделить всё
public void upd_lv_main(){
final ListView lv = (ListView)findViewById(R.id.lv_main);
ArrayList<HashMap<String, Object>> curList = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> hm;
..........
hm = new HashMap<String, Object>();
hm.put("t1",t1);
hm.put("t2",t2);
hm.put("t3",t3);
curList.add(hm);
}
final SimpleAdapter adapter = new SimpleAdapter(this, curList, R.layout.lv_main, new String[] "t1", "t2", "t3"},new int[] { R.id.tv_t1, R.id.tv_t2, R.id.tv_t3});
lv.setAdapter(adapter);
}Re: ListView как обработать нажатие кноки в строке?
Про это ВООБЩЕ ЗАБУДЬ. Отдельным методом можно, но не с этими целями. Функции тут отсутствуют.перерисовка ListView сделана в отдельной функции, чтобы ее можно было вызывать по требованию из других активностей?
И это к вопросу не относится.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: ListView как обработать нажатие кноки в строке?
почему забудь? я это реализовал и это работает, код предоставил выше
почему отсутсвуют функции? а это что такое например?
создаем класс, в нем расшариваем функцию возвращающую значение
в другом модуле объявляем класс, вызываем функцию, получаем от нее значение
так же есть функция без возвращаемого значения, которую в других языках программирования называют процедурой
почему отсутсвуют функции? а это что такое например?
создаем класс, в нем расшариваем функцию возвращающую значение
Код: Выделить всё
public String myFunct() {
....
String str="dfdfsdfs";
return str;
}так же есть функция без возвращаемого значения, которую в других языках программирования называют процедурой
Код: Выделить всё
public void myFunct() {
....
}Re: ListView как обработать нажатие кноки в строке?
создал кастомный адаптер
как получить getView? вот такая запись не работает, требует position...как узнать его?
Toast.makeText(MainActivity.this, String.valueOf(getView(position, convertView, parent)), Toast.LENGTH_SHORT).show();
Код: Выделить всё
class MySimpleAdapter extends SimpleAdapter {
public MySimpleAdapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
return view;
}
}Toast.makeText(MainActivity.this, String.valueOf(getView(position, convertView, parent)), Toast.LENGTH_SHORT).show();
Re: ListView как обработать нажатие кноки в строке?
не, не то спрашиваю
вот создал я кастомный адаптер, как узнать на какой позиции в listview сейчас нахожусь?
попробовал сделать вот так
при запуске сразу начинают выходить сообщения 0,1,2,3,4,5,6 и потом еще раз с начала...это видимо номер строки в цикле прокручиваются, видимо когда идет отрисовка ListView
а как узнать ее номер по клику на ней?
вот создал я кастомный адаптер, как узнать на какой позиции в listview сейчас нахожусь?
попробовал сделать вот так
Код: Выделить всё
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
Toast.makeText(MainActivity.this, String.valueOf(position), Toast.LENGTH_SHORT).show();
return view;
}а как узнать ее номер по клику на ней?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ListView как обработать нажатие кноки в строке?
реализуйте слушатель OnItemClickListener.
myListView.setOnItemClickListener(this);
[syntax=java5]
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//position - номер позиции в списке. View - сама вьюшка, в которой можно найти необходимые элементы и что-то с ними сделать
}
[/syntax]
Это мой код, я реализовал данный слушатель в активности
myListView.setOnItemClickListener(this);
[syntax=java5]
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//position - номер позиции в списке. View - сама вьюшка, в которой можно найти необходимые элементы и что-то с ними сделать
}
[/syntax]
Это мой код, я реализовал данный слушатель в активности
Re: ListView как обработать нажатие кноки в строке?
Mikhail_dev
я уже пробовал навесить событие на listview, почему то не срабатывает
я уже пробовал навесить событие на listview, почему то не срабатывает
Код: Выделить всё
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)findViewById(R.id.lv_main);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Toast.makeText(MainActivity.this, "ddddddd", Toast.LENGTH_SHORT).show();
}
});
//кнопка "добавить", вызывает активность activity_add
Button btn_add = (Button) findViewById(R.id.btn_add);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, AddEdit.class);
startActivityForResult(intent, REQUEST_ADDEDIT);
}
});
//отрисовать на основном экране таблицу
upd_lv_main();
}Код: Выделить всё
public void upd_lv_main(){
//отображаем данные в listView из таблицы SQL
//curList = new ArrayList<HashMap<String, Object>>();
final ListView lv = (ListView)findViewById(R.id.lv_main);
ArrayList<HashMap<String, Object>> curList = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> hm;
SQLWorkDB SQLWorkDB = new SQLWorkDB(MainActivity.this);
Cursor cursor = SQLWorkDB.GetCursor();
while (cursor.moveToNext()){
int id = cursor.getInt(cursor.getColumnIndex(SQLWorkDB.c_tMain_ID));
cc = cursor.getString(cursor.getColumnIndex(SQLWorkDB.c_tMain_cc));
ss = cursor.getString(cursor.getColumnIndex(SQLWorkDB.c_tMain_ss));
mm = cursor.getString(cursor.getColumnIndex(SQLWorkDB.c_tMain_mm));
hm = new HashMap<String, Object>();
hm.put("cc",cc); // Название
hm.put("ss",ss); // Описание
hm.put("mm",mm); // Описание
curList.add(hm);
}
// создаем адаптер
MySimpleAdapter sAdapter = new MySimpleAdapter(this, curList, R.layout.lv_main, new String[] {"cc", "ss", "mm"},
new int[] { R.id.tv_lv_main_cc, R.id.tv_lv_main_ss, R.id.tv_lv_main_mm});
// определяем список и присваиваем ему адаптер
lv.setAdapter(sAdapter);
}Код: Выделить всё
class MySimpleAdapter extends SimpleAdapter {
public MySimpleAdapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
return view;
}
}Re: ListView как обработать нажатие кноки в строке?
когда делаю заполнение через SimpleAdapter то строки в ListView не нажимаются и соотвественно не срабатывает onClick на них...
если сделать через ArrayAdapter - то все работает нормально
но мне надо через SimpleAdapter
если сделать через ArrayAdapter - то все работает нормально
но мне надо через SimpleAdapter
Re: ListView как обработать нажатие кноки в строке?
фух, решение найдено на зарубежном форуме
итак если при заполнении ListView через SimplAdapter у вас не наживамются строки и не срабатывает событие setOnItemClickListener, то...
добавить строчку android:descendantFocusability="blocksDescendants" в макет layout файла который служит шаблоном для заполнения основной ListView
вот где нашел ответ
http://stackoverflow.com/questions/1893 ... g#18933271
итак если при заполнении ListView через SimplAdapter у вас не наживамются строки и не срабатывает событие setOnItemClickListener, то...
добавить строчку android:descendantFocusability="blocksDescendants" в макет layout файла который служит шаблоном для заполнения основной ListView
вот где нашел ответ
http://stackoverflow.com/questions/1893 ... g#18933271
Re: ListView как обработать нажатие кноки в строке?
было нереально сложно, но разобрался и с основным вопросом который сам и задал...
опять же на русских форумах инфы не нашел, собирал с иностранных по крупицам, кому потребуется - вот решение возможно не самое элегантное, но оно работает...
в кастомном адаптере переписываем метод getView, таким образом что каждой кнопке присваивается номер строки
в layout шаблона которым заполняем ListView, для кнопки определяем событие
android:onClick="onClickPlayInMain"
в основной активити прописываем реакцию на это событие, сначала из кнопки получаем номер строки в которой она присутсвтует, потом находим в этой строке нужные элемент и работаем с ним
опять же на русских форумах инфы не нашел, собирал с иностранных по крупицам, кому потребуется - вот решение возможно не самое элегантное, но оно работает...
в кастомном адаптере переписываем метод getView, таким образом что каждой кнопке присваивается номер строки
Код: Выделить всё
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
Button btn = (Button) view.findViewById(R.id.btn_lv_main_play);
btn.setTag(position);
return view;
}android:onClick="onClickPlayInMain"
в основной активити прописываем реакцию на это событие, сначала из кнопки получаем номер строки в которой она присутсвтует, потом находим в этой строке нужные элемент и работаем с ним
Код: Выделить всё
public void onClickPlayInMain (View v){
int positionString=(Integer) v.getTag();
ListView lv = (ListView)findViewById(R.id.lv_main);
TextView ed = (TextView)lv.getChildAt(positionString).findViewById(R.id.tv_lv_main_Contact);
ed.setText("ddddddd");
Toast.makeText(this,String.valueOf(v.getTag()), Toast.LENGTH_SHORT).show();
}Re: ListView как обработать нажатие кноки в строке?
такую ерунду на заграничных форумах? ну разве что ради тренировки английского.
Поищи по нашему форуму, сколько раз упоминалось хотя бы blocksDescendants, а так же обрати внимание - в какой теме.. а в этом теме уже нажатие кнопки, думаю, обсуждалось много раз.
Поищи по нашему форуму, сколько раз упоминалось хотя бы blocksDescendants, а так же обрати внимание - в какой теме.. а в этом теме уже нажатие кнопки, думаю, обсуждалось много раз.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: ListView как обработать нажатие кноки в строке?
Вот, например, я пример адаптера выкладывал viewtopic.php?f=3&t=251&start=200#p33025Foenix писал(а):такую ерунду на заграничных форумах? ну разве что ради тренировки английского.
Поищи по нашему форуму, сколько раз упоминалось хотя бы blocksDescendants, а так же обрати внимание - в какой теме.. а в этом теме уже нажатие кнопки, думаю, обсуждалось много раз.
Там CursorAdapter используется, но на примере этого адаптера можно сделать и на любом другом адаптере.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: ListView как обработать нажатие кноки в строке?
мне как новичку пока сложно искать инфу и разбираться с нуля, поэтому любая проблема превращается в глобальную =)
Re: ListView как обработать нажатие кноки в строке?
когда возникает проблема то не знаешь ведь что именно и где искатьFoenix писал(а):сколько раз упоминалось хотя бы blocksDescendants
