Button Listener per button in frammento in android

Sono nuovo a Android e cerco di imparare da solo. Ma ho un tempo difficile con frammenti. Sto creando una semplice applicazione per imparare frammenti. Penso che possa sembrare stupido, ma davvero non posso far funzionare questo.

Tutto quello che voglio fare è click un button (buttonSayHi) in Fragment_One, Fragment_One dovrebbe essere sostituito da Fragment_Two.

  • Imposta il tema Holo nelle versioni Android più vecchie?
  • Cordova / PhoneGap Plugin Sviluppo workflow per Android
  • Perché Wrap_Content fuoco BindView più di una volta
  • Come colbind Android a un server di database
  • Eclipse DDMS window non mostrando alcuna cosa + android
  • Android / Java - Inserisci text semplice sul muro di Facebook?
  • Non sono sicuro quando viene chiamato il codice di frammento e where dovrei scrivere il mio codice per call il secondo frammento. Ho l'errore: Imansible avviare componente attività.

    Tuttavia, il codice funziona bene se scartare l'ascoltatore per il button e il frammento viene visualizzato all'interno dell'attività.

    Ho fatto notevoli ricerche, leggo il tutorial di frammenti su developer.android.com e anche il tutorial di Lars Vogella. Penso che i miei concetti non siano chiari.

    Qualsiasi aiuto sarà apprezzato.

    Il seguente è il codice:

    activity_main.xml

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/frameLayoutFragmentContainer" android:layout_width="fill_parent" android:layout_height="fill_parent" > </FrameLayout> 

    fragment_one.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/editTextPersonName" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" > <requestFocus /> </EditText> <Button android:id="@+id/buttonSayHi" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Say Hi" android:onClick="onButtonClicked"/> </LinearLayout> 

    fragment_two.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/textViewResult" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="I will say Hi!" /> </LinearLayout> 

    MainActivity.java

     package com.example.fragmenttutorial; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; public class MainActivity extends Activity{ View view; FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Fragment fragmentOne = new FragmentOne(); fragmentTransaction.add(R.id.frameLayoutFragmentContainer, fragmentOne); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } protected void onButtonClicked() { if(view.getId() == R.id.buttonSayHi){ Fragment fragmentTwo = new FragmentTwo(); fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, fragmentTwo); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } } } 

    FragmentOne.java

     package com.example.fragmenttutorial; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FragmentOne extends Fragment{ View view; FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_one, container, false); return view; } // protected void onButtonClicked() // { // if(view.getId() == R.id.buttonSayHi){ // Fragment fragmentTwo = new FragmentTwo(); // // fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, fragmentTwo); // fragmentTransaction.addToBackStack(null); // // fragmentTransaction.commit(); // // } // // } } 

    Ho commentato il codice clic sul frammento. Ho anche cercato di implementare l'onClickListener nel frammento.

    FragmentTwo.java

     package com.example.fragmenttutorial; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FragmentTwo extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_two, container, false); return view; } } 

    EDIT: ho rimosso la linea android: onClick = "onButtonClicked" dal mio codice in XML. E ha modificato i seguenti file ma ancora non funziona. Puoi offrirti un esempio di lavoro senza la linea Android: onClick = "onButtonClicked".

    MainActivity.java

     package com.example.fragmenttutorial; import android.os.Bundle; import android.view.View; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; public class MainActivity extends Activity{ View view; Fragment fragmentOne; FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragmentOne = new FragmentOne(); fragmentTransaction.add(R.id.frameLayoutFragmentContainer, fragmentOne); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } } 

    FragmentOne.java

     package com.example.fragmenttutorial; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; public class FragmentOne extends Fragment implements OnClickListener{ View view; Fragment fragmentTwo; FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_one, container, false); Button buttonSayHi = (Button) view.findViewById(R.id.buttonSayHi); buttonSayHi.setOnClickListener(this); return view; } @Override public void onClick(View v) { fragmentTwo = new FragmentTwo(); fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, fragmentTwo); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } } 

    Grazie per i tuoi preziosi suggerimenti.

  • setMinDate (...) per DatePicker non funziona quando viene richiamato una seconda volta
  • Android - Come fare menu di diapositive come facebook, spotify e Google +
  • android: AbsListView.OnScrollListener SCROLL_STATE_IDLE non viene chiamato dopo SCROLL_STATE_TOUCH_SCROLL (Versione 2.1)
  • Android SAF (Storage Access FrameWork): Ottieni un particolare file Uri da TreeUri
  • java.exe finito con valore di output zero
  • fa minHeight fare qualcosa?
  • 9 Solutions collect form web for “Button Listener per button in frammento in android”

    La class di frammento deve implementare OnClickListener

     public class SmartTvControllerFragment extends Fragment implements View.OnClickListener 

    Quindi get la vista, il button di collegamento e impostare onClickListener come nell'esempio qui sotto

      View view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.smart_tv_controller_fragment, container, false); upButton = (Button) view.findViewById(R.id.smart_tv_controller_framgment_up_button); upButton.setOnClickListener(this); return view; } 

    E poi aggiungi il metodo onClickListener e fai quello che vuoi.

     @Override public void onClick(View v) { //do what you want to do when button is clicked switch (v.getId()) { case R.id.textView_help: switchFragment(HelpFragment.TAG); break; case R.id.textView_settings: switchFragment(SettingsFragment.TAG); break; } } 

    Questo è il mio esempio di codice, ma spero che tu abbia capito

    Utilizza il tuo codice

     public class FragmentOne extends Fragment implements OnClickListener{ View view; Fragment fragmentTwo; FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_one, container, false); Button buttonSayHi = (Button) view.findViewById(R.id.buttonSayHi); buttonSayHi.setOnClickListener(this); return view; } 

    Ma penso sia meglio gestire i pulsanti in questo modo:

     @Override public void onClick(View v) { switch(v.getId()){ case R.id.buttonSayHi: /** Do things you need to.. fragmentTwo = new FragmentTwo(); fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, fragmentTwo); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); */ break; } } 

    Fragment Listener

    Se un fragment deve comunicare gli events activity , il fragment deve definire interface come tipo interno e richiedere che l' activity deve implement questa interface :

     import android.support.v4.app.Fragment; public class MyListFragment extends Fragment { // ... // Define the listener of the interface type // listener is the activity itself private OnItemSelectedListener listener; // Define the events that the fragment will use to communicate public interface OnItemSelectedListener { public void onRssItemSelected(String link); } // Store the listener (activity) that will have events fired once the fragment is attached @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof OnItemSelectedListener) { listener = (OnItemSelectedListener) activity; } else { throw new ClassCastException(activity.toString() + " must implement MyListFragment.OnItemSelectedListener"); } } // Now we can fire the event when the user selects something in the fragment public void onSomeClick(View v) { listener.onRssItemSelected("some link"); } } 

    e poi activity :

     import android.support.v4.app.FragmentActivity; public class RssfeedActivity extends FragmentActivity implements MyListFragment.OnItemSelectedListener { DetailFragment fragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rssfeed); fragment = (DetailFragment) getSupportFragmentManager() .findFragmentById(R.id.detailFragment); } // Now we can define the action to take in the activity when the fragment event fires @Override public void onRssItemSelected(String link) { if (fragment != null && fragment.isInLayout()) { fragment.setText(link); } } } 

    Mentre state dichiarando onclick in XML, devi declair il metodo e passare View v come parametro e rendere il metodo pubblico …

     Ex: //in xml android:onClick="onButtonClicked" // in java file public void onButtonClicked(View v) { //your code here } 
      //sure run it i will also test it //we make a class that extends with the fragment public class Example_3_1 extends Fragment implements OnClickListener { View vi; EditText t; EditText t1; Button bu; // that are by defult function of fragment extend class @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,BundlesavedInstanceState) { vi=inflater.inflate(R.layout.example_3_1, container, false);// load the xml file bu=(Button) vi.findViewById(R.id.button1);// get button id from example_3_1 xml file bu.setOnClickListener(this); //on button appay click listner t=(EditText) vi.findViewById(R.id.editText1);// id get from example_3_1 xml file t1=(EditText) vi.findViewById(R.id.editText2); return vi; // return the view object,that set the xml file example_3_1 xml file } @Override public void onClick(View v)//on button click that called { switch(v.getId())// on run time get id what button os click and get id { case R.id.button1: // it mean if button1 click then this work t.setText("UMTien"); //set text t1.setText("programming"); break; } } } 

    Prova questo :

    FragmentOne.java

     import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; public class FragmentOne extends Fragment{ View rootView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_one, container, false); Button button = (Button) rootView.findViewById(R.id.buttonSayHi); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onButtonClicked(v); } }); return rootView; } public void onButtonClicked(View view) { //do your stuff here.. final FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.frameLayoutFragmentContainer, new FragmentTwo(), "NewFragmentTag"); ft.commit(); ft.addToBackStack(null); } } 

    controlla questo: clicca qui

    Questo funziona per me.

     private OnClickListener mDisconnectListener; mDisconnectListener = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }; ... ... onCreateView(...){ mButtonDisconnect = (Button) rootView.findViewById(R.id.button_disconnect); mButtonDisconnect.setOnClickListener(mDisconnectListener); ... } 

    Devi solo avere la visione dell'attività che port questo frammento e questo potrebbe accadere solo quando il tuo frammento è già stato creato

    sovrascrivere il metodo onViewCreated() all'interno del frammento e godere della sua magia 🙂 ..

     @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Button button = (Button) view.findViewById(R.id.YOURBUTTONID); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //place your action here } }); 

    Spero che questo potrebbe aiutarti;

    Basta passare l'object di visualizzazione in function onButtonClicked. getView () non sembra funzionare come previsto all'interno del frammento. Prova questo codice per il tuo frammento FragmentOne

    PS. hai ridefinito la visualizzazione di oggetti nel codice originale FragmentOne.

     package com.example.fragmenttutorial; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FragmentOne extends Fragment{ FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_one, container, false); onButtonClicked(view); return view; } protected void onButtonClicked(View view) { if(view.getId() == R.id.buttonSayHi){ Fragment fragmentTwo = new FragmentTwo(); fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, fragmentTwo); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.