0

Я использую кнопку изображения в списке, и все работает нормально. Но когда я попытался изменить фоновый ресурс на кнопке с изображением на своем клике, я отключил приложение. вот мой код.Android listview ImageButton onclick error

public View getView(final int position, View convertView, 
      ViewGroup parent) { 

     if (convertView == null) { 

      // mCheckStates = new SparseBooleanArray(name1.size()); 
      mInflater = (LayoutInflater) getActivity().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 

      convertView = mInflater.inflate(R.layout.row, null); 

      holder = new ViewHolder(); 

      holder.tv = (TextView) convertView.findViewById(R.id.textView1); 
      holder.tv1 = (TextView) convertView 
        .findViewById(R.id.textView2); 
      holder.b = (ImageButton) convertView 
        .findViewById(R.id.btn_invite); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.tv.setText(name1.get(position)); 
     holder.tv1.setText(phno1.get(position)); 
     holder.b.setTag(position); 

     holder.b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       int pos = (Integer) v.getTag(); 

       RelativeLayout rl = (RelativeLayout)v.getParent(); 
       holder.b = (ImageButton)rl.getChildAt(0); 
       holder.b.setBackgroundResource(R.drawable.ic_invited); 

       }); 

     return convertView; 
    } 
+2

Вы можете разместить StackTrace пожалуйста ? –

+0

удалить весь код из 'onClick' только для' holder.b.setBackgroundResource (R.drawable.ic_invited); 'почему вы сохраняете позицию, если она доступна вам? – SorryForMyEnglish

+1

@KevinChris LinearLayout не может быть отправлен в imagebutton –

ответ

-3

Это следующее было бы правильным проточного

общественности Посмотреть GetView (конечное положение INT, Вид convertView, ViewGroup родитель) {

if (convertView == null) { 

     // mCheckStates = new SparseBooleanArray(name1.size()); 
     mInflater = (LayoutInflater) getActivity().getSystemService(
       Context.LAYOUT_INFLATER_SERVICE); 

     convertView = mInflater.inflate(R.layout.row, null); 

     holder = new ViewHolder(); 

     holder.tv = (TextView) convertView.findViewById(R.id.textView1); 
     holder.tv1 = (TextView) convertView 
       .findViewById(R.id.textView2); 
     holder.b = (ImageButton) convertView 
       .findViewById(R.id.btn_invite); 

    holder.tv.setText(name1.get(position)); 
    holder.tv1.setText(phno1.get(position)); 
    holder.b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      int pos = (Integer) v.getTag(); 

      RelativeLayout rl = (RelativeLayout)v.getParent(); 
      holder.b = (ImageButton)rl.getChildAt(0); // if your error is layout can't be casted to image Button, then in this line may be you are getting an unexpected layout view instead of a ImageButton 
      holder.b.setBackgroundResource(R.drawable.ic_invited); 

      }); 
     holder.b.setTag(position); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 


    return convertView; 
} 
+0

Можете ли вы объяснить, как ваш код отличается от OP и * почему * он должен работать, а не просто вставлять код? – codeMagic

+0

это не просто вставка кода. вся часть об установке текстового и установочного кликера для прослушивания была перемещена, когда преобразование равно null. Плюс, я написал почти то же самое всего несколько минут назад. нашел глупую ошибку, как вопрос, пока мы решали ошибку. Даже если мое решение не может быть на 100% правильным [он не предоставил трассировку стека], можете ли вы описать, почему я получил понижение? –

+0

Уверен, что просто вставляем код, когда все ваше объяснение: «Это следующее было бы правильным потоком». – codeMagic