J'ai un fragment qui se compose d'une fileuse et d'un bouton. Vous sélectionnez l'une des quatre options avec le spinner, puis le bouton vous amènera à l'activité suivante.
Afin d'implémenter le spinner, j'ai besoin d'implémenter onItemSelectedListener sur le fragment, mais pour utiliser le bouton, j'ai besoin d'implémenter onClickListener. Mais je ne peux pas faire les deux ??? Je m'attendais à ce que ce soit une chose très simple et la nécessité d'avoir plusieurs écouteurs d'événements différents sur une vue doit être courante, alors comment implémentez-vous cela?
Voici le code que j'utilise: -
public class FragmentTypeSelect étend Fragment implémente OnItemSelectedListener {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState){
// set the view so that it can be referenced
View theView = inflater.inflate(R.layout.fragment_type_select,
container,false);
// set OnClickListener for the button
setUpClickListener(theView,R.id.but_select);
//===============================
// NEW TYPE SPINNER
//===============================
Spinner spinner = (Spinner) theView.findViewById(R.id.new_type_spinner);
spinner.setOnItemSelectedListener((OnItemSelectedListener) this);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
R.array.types_array, Android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);
return theView;
}
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id)
{
TextView headingText = (TextView)getView().findViewById(R.id.new_diet_type_text_heading);
TextView detailText = (TextView)getView().findViewById(R.id.new_diet_type_text_detail);
if (pos == 0)
{
headingText.setText(R.string.heading_type_1);
detailText.setText(R.string.detail_type_1);
}
if (pos == 1)
{
headingText.setText(R.string.heading_type_2);
detailText.setText(R.string.detail_type_2);
}
if (pos == 2)
{
headingText.setText(R.string.heading_type_3);
detailText.setText(R.string.detail_type_3);
}
if (pos == 3)
{
headingText.setText(R.string.heading_type_4);
detailText.setText(R.string.detail_type_4);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
public void onClick(View view){
Toast.makeText(getActivity(), "Clicked", Toast.LENGTH_LONG).show();
}
private void setUpClickListener(View theView, int childViewID) {
View childView = theView.findViewById(childViewID);
childView.setOnClickListener((OnClickListener) this);
}
}
À l'origine, je venais d'avoir le spinner et ça fonctionnait bien. J'ai ensuite essayé de mettre la fonction bouton avec l'ensemble OnClickListener dans onCreateView et en ajoutant les méthodes supplémentaires onClick et setUpClickListener. C'est exactement comment je l'ai fait ailleurs, mais dans d'autres cas, je n'ai pas eu d'autres événements à gérer et j'ai fait en sorte que la classe implémente onClickListener. Java ne prend pas en charge plusieurs outils d'interface (si je comprends bien) et donc ma question.
J'espère que vous pourrez aider. Je suis probablement un peu épais mais je suis encore assez nouveau dans l'ensemble OO ainsi qu'Android.
Tu peux faire:
public class FragmentTypeSelect extends Fragment
implements OnItemSelectedListener, OnClickListener {
public class Home extends AppCompatActivity implements ImageAdapter.OnItemClickListener ,Filterable {
puis cliquez sur l'ampoule rouge et appliquez la méthode. l'implémentation de plus d'une interface peut être effectuée en séparant les interfaces par une virgule.