Я начинаю Android. Я хочу добавить событие onClick для кнопок, используемых в элементе Listview. Как я могу дать событие onClick для кнопок в элементе списка.
Android: как установить событие onClick для кнопки в элементе списка в ListView
Ответ 1
Вы можете установить событие onClick
в свой пользовательский метод getView
.
проверьте ссылку http://androidforbeginners.blogspot.it/2010/03/clicking-buttons-in-listview-row.html
Ответ 2
В классе адаптера
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.vehicals_details_row, parent, false);
Button deleteImageView = (Button) row.findViewById(R.id.DeleteImageView);
deleteImageView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//...
}
});
}
Но вы можете получить проблему - строка listView не может быть нажата. Решение:
- сделать ListView focusable
android:focusable="true"
- Кнопка не настраивается
android:focusable="false"
Ответ 3
Попробуйте это,
public View getView(final int position, View convertView,ViewGroup parent)
{
if(convertView == null)
{
LayoutInflater inflater = getLayoutInflater();
convertView = (LinearLayout)inflater.inflate(R.layout.YOUR_LAYOUT, null);
}
Button Button1= (Button) convertView .findViewById(R.id.BUTTON1_ID);
Button1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// Your code that you want to execute on this button click
}
});
return convertView ;
}
Это может помочь вам....
Ответ 4
В пользовательском адаптере внутри метода getView:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do things Here
}
});
Ответ 5
Я предполагаю, что вы определили пользовательский адаптер для своего ListView.
Если это так, вы можете назначить onClickListener
для своей кнопки внутри пользовательского адаптера getView()
.
Ответ 6
Это обсуждалось во многих сообщениях, но все же я не мог найти решение с помощью:
android:focusable="false"
android:focusableInTouchMode="false"
android:focusableInTouchMode="false"
Ниже решение будет работать с любыми компонентами ui: Button, ImageButtons, ImageView, Textview. LinearLayout, RelativeLayout кликает внутри ячейки списка и отвечает на onItemClick:
Класс адаптера - getview():
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.my_ref_row, parent, false);
}
final Organization currentOrg = organizationlist.get(position).getOrganization();
TextView name = (TextView) view.findViewById(R.id.name);
Button btn = (Button) view.findViewById(R.id.btn_check);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
context.doSelection(currentOrg);
}
});
if(currentOrg.isSelected()){
btn.setBackgroundResource(R.drawable.sub_search_tick);
}else{
btn.setBackgroundResource(R.drawable.sub_search_tick_box);
}
}
В этом вы можете получить объект, щелкнув по кнопке с объектом. (Специально, если вы хотите, чтобы кнопка выступала в качестве флажка с выбранными и не выбранными состояниями):
public void doSelection(Organization currentOrg) {
Log.e("Btn clicked ", currentOrg.getOrgName());
if (currentOrg.isSelected() == false) {
currentOrg.setSelected(true);
} else {
currentOrg.setSelected(false);
}
adapter.notifyDataSetChanged();
}
Ответ 7
В методе getview поместите прослушиватель, не проверяя view.try, чтобы следовать этому.. он работал в моем случае.. Как увеличить или уменьшить значение edittext в каждой строке списка?