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 2

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