setOnItemClickListener не работает в listview в то время как я использую imagebutton внутри пользовательского адаптера
В ListView я добавляю TextView и ImageButton черезCustomAdapter класс (который расширяет ArrayAdapter).когда я добавляю onClickListener в ImageButton в классе CustomAdapter, то ListView onItemClickListener не является working.In дело я хочу выбрать несколько списков, а также один список, что слушатель не работает и параллельный ImageButton onClickListener работает.я хочу, чтобы и ListView и ImageButton onClickListener и onItemClickListener работали в моей деятельности.Как решить этот вопрос?
Кто-нибудь дать некоторые предложения!
Код Ниже:
public class ViewHolder {
TextView username;
ImageButton download;
TextView time;
ImageView contactpic; }
public interface ButtonListener {
public void onButtonClickListner(int position, VoiceMailRecords value);
}
public void setCustomButtonListner(ButtonListener listener) {
this.customListner = listener;
}
public View getView(final int position, View convertView, ViewGroup parent)
{
ViewHolder viewHolder;
viewHolder = new ViewHolder();
if(convertView==null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.recorded_item, parent, false);
//TextView date = (TextView) convertView.findViewById(R.id.date);
viewHolder.time = (TextView) convertView.findViewById(R.id.callingTime);
//TextView number = (TextView) convertView.findViewById(R.id.callerNumber);
viewHolder.username = (TextView) convertView.findViewById(R.id.callerName);
viewHolder.contactpic = (ImageView) convertView.findViewById(R.id.imageView_round);
// ImageView checked = (ImageView) convertView.findViewById(R.id.is_checked);
viewHolder.download = (ImageButton) convertView.findViewById(R.id.is_download);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
final VoiceMailRecords user = getItem(position);
viewHolder.username.setText(user.getCallerNumber());
return convertView;
}
В Деятельности
voiceMailRecordAdapter=new VoiceMailRecordAdapter(this,voiceMailRecords,this);
voicemailList.setAdapter(voiceMailRecordAdapter);
voiceMailRecordAdapter.notifyDataSetChanged();
voicemailList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(ListVoiceMailRecord.this,"Position :"+position+" clicked",Toast.LENGTH_LONG).show();
return true;
}
});
@Override
public void onButtonClickListner(int position, VoiceMailRecords value) {
Log.d(TAG, "VoiceMailApi onButtonClickListner " );
Toast.makeText(ListVoiceMailRecord.this,"onButtonClickListner :"+position+"",Toast.LENGTH_LONG).show();
}
3 ответа:
Вам нужно установить
focusableInTouchMode
как ложь для вашего имиджа, Баттон.Добавьте эту строку в свой imageButton
android:clickable="false" android:focusableInTouchMode="false" android:focusable="false"
И
instead of onItemClick()
попробуй onClick () для convertview,convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("clicked"," yes"); } }
Много раз
android:focusable="false"
иandroid:focusableInTouchMode="false"
будет делать трюк, но если они не будут работать, то иногда список не сможет сделать прослушиватель щелчка. В этом случае вам, возможно, придется добавить еще один атрибут.android:descendantFocusability="blocksDescendants"
И этот атрибут должен быть добавлен в самый верхний макет вашего XML, где вы предоставили элементы ListView.
Вы можете добавить интерфейс в адаптер и можете обрабатывать щелчок в действии или фрагменте
public interface ButtonClick{ void Click(View view,int position); } public Adapter(Context context, ButtonClick buttonclick){ this.buttonclick=buttonclick; this.context=context; } ButtonClick buttonclick; yourimage.setTag(position); yourimage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos= (int) v.getTag(); if(buttonclick!=null){ buttonclick.Click(v,pos); } } });
Вы можете обрабатывать щелчок в действии, когда вы устанавливаете адаптер
Adapter adapter = new Adapter(Youractivity.this, new Adapter.ButtonClick() { @Override public void Click(View view, int position) { // your logic } });
Надеюсь, это поможет .
this is how i have implemented in multiple projects