Ich habe ein Fragment, das aus einem Drehfeld und einer Schaltfläche besteht. Sie wählen mit dem Drehfeld eine von vier Optionen aus und die Schaltfläche führt Sie zur nächsten Aktivität.Implementieren Sie mehrere Ereignislistener im selben Fragment - Android
Um den Spinner zu implementieren, muss ich onItemSelectedListener auf dem Fragment implementieren, aber die Schaltfläche zu verwenden, die onClickListener implementieren muss. Aber ich kann nicht beides tun ??? Ich hätte erwartet, dass dies eine sehr einfache Sache ist und die Notwendigkeit, mehrere verschiedene Event-Listener auf einer View zu haben, muss üblich sein, also wie implementieren Sie das? Hier
ist der Code, den ich verwende: -
public class FragmentTypeSelect Fragment erstreckt implementiert 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);
}
}
Ursprünglich hatte ich nur den Spinner in und bekam diese funktioniert gut. Ich habe dann versucht, die Button-Funktion mit dem Set OnClickListener in der onCreateView einzufügen und die zusätzlichen onClick- und setUpClickListener-Methoden hinzuzufügen. Dies ist genau, wie ich es anderswo gemacht habe, aber in anderen Fällen hatte ich nicht andere Ereignisse zu handhaben und hat die Klasse den onClickListener implementieren lassen. Java unterstützt keine Multiple-Interface-Implementierungen (wie ich es verstehe) und daher meine Frage.
Ich hoffe, Sie können helfen. Ich bin wahrscheinlich ein bisschen dick, aber ich bin immer noch ziemlich neu in der ganzen OO sowie Android.
Sie beide tun können. Veröffentlichen Sie Ihren Code und erklären Sie Ihr Problem bitte weiter. –
Leo, ich habe jetzt den obigen Code geschrieben .... Danke – RobT