2015-01-19 3 views
0

Спасибо, ребята, за помощь!Метод 'onCheckboxClicked (android.view.View)' никогда не используется

Теперь я обновил свой код, и в нем нет ошибки. Но когда я запускаю приложение, он падает, когда я пытаюсь провести этот фрагмент. Есть ли что-либо в этом коде или что-то еще в моем приложении вызывает эту проблему?

package hej.swipeview; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.CheckBox; 
import android.widget.ImageView; 


public class FörstängningFragment extends Fragment { 


int checkOne = '0'; 
int checkTwo = '0'; 
int checkThree = '0'; 
ImageView bild = (ImageView) 
     getView().findViewById(R.id.forstangningimage); 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_forstangning, container, false); 
    bild = (ImageView) rootView.findViewById(R.id.forstangningimage); 
    bild.setImageResource(R.drawable.forstangning); 
    CheckBox c = (CheckBox) rootView.findViewById(R.id.checkboxbak); 
    CheckBox c2 = (CheckBox) rootView.findViewById(R.id.checkBox2); 
    CheckBox c3 = (CheckBox) rootView.findViewById(R.id.checkBox3); 


    c.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      boolean checked = ((CheckBox) v).isChecked(); 
      switch (v.getId()) { 

       case R.id.checkboxbak: 

        if (checked) { 
         checkOne = '1'; 
         changeImage(); 
        } else { 
         checkOne = '0'; 
         changeImage(); 
        } 
        break; 
      } 
      onClick(v); 
     } 
    }); 
    c2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      boolean checked = ((CheckBox) v).isChecked(); 
      switch (v.getId()) { 

       case R.id.checkBox2: 
        if (checked) { 
         checkTwo = '1'; 
         changeImage(); 
        } else { 
         checkTwo = '0'; 
         changeImage(); 
        } 
        break; 
      } 
      onClick(v); 
     } 
    }); 
    c3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      boolean checked = ((CheckBox) v).isChecked(); 
      switch (v.getId()) { 

       case R.id.checkBox3: 
        if (checked) { 
         checkThree = '1'; 
         changeImage(); 
        } else { 
         checkThree = '0'; 
         changeImage(); 
        } 
        break; 
      } 

      onClick(v); 
     } 
    }); 


    changeImage(); 
    { 

     if (checkOne != '1' && checkTwo != '1' && checkThree != '1') { 

      bild.setImageResource(R.drawable.forstangning); 
     } else { 

      if (checkOne == '1') { 
       bild.setImageResource(R.drawable.splash2); 
      } else if (checkOne == '1' && checkTwo == '1' && checkThree == '0') { 
       bild.setImageResource(R.drawable.dimensioner); 
      } else if (checkOne == '1' && checkTwo == '1' && checkThree == '1') { 
       bild.setImageResource(R.drawable.lastmonster); 
      } else if (checkOne == '1' && checkTwo == '0' && checkThree == '1') { 
       bild.setImageResource(R.drawable.ic_launcher); 
      } else if (checkOne == '0' && checkTwo == '1' && checkThree == '0') { 
       bild.setImageResource(R.drawable.ic_launcher); 
      } else if (checkOne == '0' && checkTwo == '1' && checkThree == '1') { 
       bild.setImageResource(R.drawable.ic_launcher); 
      } else if (checkOne == '0' && checkTwo == '0' && checkThree == '1') { 
       bild.setImageResource(R.drawable.ic_launcher); 
      } 
     } 

    } 
    return rootView; 
} 

private void changeImage() { 


} 

} 
+1

Сообщите нам код, в котором вы вызываете эту функцию? Является ли атрибут 'onClick' xml установленным на флажке в вашем файле макета? – stkent

+0

Да, я установил все флажки для: android: onClick = "onCheckboxClicked" –

+0

@ElinAndersson см. Мой обновленный ответ – Leigh

ответ

0

Убедитесь, что ваш checkboxes инициируются и имеют setOnClickListener(this) внутри Fragment.

Внутри вашего onCreateView вы должны иметь что-то похожее на это:

CheckBox c = (CheckBox) rootView.findViewById(R.id.chkName); 
c.setOnClickListener(this); 

Так ваш `Фрагмент должен выглядеть примерно так:

public class FragmentName extends Fragment implements View.OnClickListener { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_pick, container, false); 

     CheckBox c = (CheckBox) rootView.findViewById(R.id.chkName); 
     c.setOnCheckedChangeListener(this); 
    } 
} 

Затем сделать вас Фрагмент OverridesetOnClickListener внутри фрагмента:

@Override 
public void onClick(View view) { 
// Your code here 
} 

В качестве альтернативы убедитесь, что вы установили атрибут внутри макета XML файла:

<CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New CheckBox" 
     android:onClick="onCheckboxClicked" 
     android:id="@+id/checkBox" 
     android:layout_weight="1" 
     android:clickable="true" /> 

Как stkent указывал из Android Documentation

Для определения обработчика событий нажмите на кнопку, добавить андроид: onClick для элемента в вашем XML-макете. Значение этого атрибута должно быть именем метода, который вы хотите вызвать в ответ на событие click. Упражнение, выполняющее макет, должно затем реализовать соответствующий метод.

+0

Я сделал это, но он все еще говорит, что: Метод 'onClick (android.view.View)' никогда не используется , –

+1

@ElinAndersson вы должны рассмотреть ответ stkent ниже. Если вы поете атрибут 'onClick' внутри представления« Фрагмент », вы должны« переопределить »метод' onClick (View view) 'внутри родительского« Активность ». Чтобы этого избежать, используйте мое первое предложение, которое для меня является предпочтительным способом при использовании 'Fragments' – Leigh

0

От http://developer.android.com/guide/topics/ui/controls/button.html#HandlingEvents (курсив мой):

Чтобы определить обработчик события щелчка на кнопке, добавьте андроида: OnClick атрибут элемента в макете XML. Значение этого атрибута должно быть именем метода, который вы хотите вызвать в ответ на событие click. В процессе размещения макета должен быть реализован соответствующий метод.

Так что ваш метод onCheckboxClicked должен быть реализован хостинговой деятельностью, а не фрагментом. Если это звучит глупо, это так, и вы должны считать не, используя атрибут xml onClick. Вместо этого вы можете установить прослушиватель программно в вашем коде фрагмента.

0

Ваша проблема в том, что вы пытаетесь установить прослушиватель onclick в фрагменте. поскольку фрагмент «живет» в действии, вы НЕ МОЖЕТЕ неявно инициировать метод в классе фрагмента и объявить его в xml. Чтобы использовать код, выполните следующие действия:
1. init ВСЕ фрагменты xml, прежде чем вы вернете изображение с фальсификацией
2.Набор методов, прежде чем вернуть надутый вид и ПОСЛЕ завышены смежный вид, что это -

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_forstangning, container, false); 
    bild = (ImageView)rootView.findViewById(R.id.forstangningimage); 
    bild.setImageResource(R.drawable.forstangning); 
    CheckBox c = (CheckBox) rootView.findViewById(R.id.checkboxbak); 
    CheckBox c2 = (CheckBox) rootView.findViewById(R.id.checkBox2); 
    CheckBox c3 = (CheckBox) rootView.findViewById(R.id.checkBox3); 
    c.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      onClick(v);//THIS IS THE METHOD YOU WROTE ON THE ATTACHED CODE!! 
     } 
    }); 
    c2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      onClick(v);//THIS IS THE METHOD YOU WROTE ON THE ATTACHED CODE!! 
     } 
    }); 
    c3.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      onClick(v);//THIS IS THE METHOD YOU WROTE ON THE ATTACHED CODE!! 
     } 
    }); 

    return rootView; 

} 

PS - Измените имя, которое вы дали метод OnClick вы создали что-то другое, в противном случае вы будете имеют столкновение в наименовании переопределенного метода в слушателе и метод, который вы создали.

Смежные вопросы