0

J'ai un simple bouton sur un fragment, le bouton est bien déclaré, mais quand j'appuie sur le bouton de l'application, rien ne se passe.Bouton ne fonctionne pas sur Android Fragment

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    Log.i(TAG, "onCreate"); 

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

    metIP = (EditText) rootView.findViewById(R.id.etIP); 
    mtvRespuesta = (TextView) rootView.findViewById(R.id.tvRespuesta); 
    mbtConectar = (Button) rootView.findViewById(R.id.btConectar); 
    metPuerto = (EditText) rootView.findViewById(R.id.etPuerto); 


    // contexto de la aplicacion 
    cont = super.getActivity().getApplicationContext(); 
    // connectivityManager 
    myConnManager = (ConnectivityManager) super.getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); 
    // broadcastReceiver de las conexiones WiFi, registro del mismo dentro 
    // de la aplicacion 
    BroadcastReceiverWifi brwifi = new BroadcastReceiverWifi(this, 
      myConnManager); 
    super.getActivity().registerReceiver(brwifi.myWifiReciever, new IntentFilter(
      ConnectivityManager.CONNECTIVITY_ACTION)); 

    mbtConectar.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.i(TAG,"dentro de onClick"); 
      eventoConectar(v); 
     } 
    }); 

    return rootView; 
} 

code xml complet, où le bouton est déclaré. appelé activity_cliente.xml

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_height="match_parent" 
android:layout_width="match_parent"> 
<TableLayout 
    android:id="@+id/TableLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.daviddiez.clientearduinotab.ClienteActivity" > 

    <!-- fila para campo de IP con su etiqueta --> 

    <TableRow 
     android:id="@+id/tableRow1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/tvIP" 
     android:layout_width="30dp" 
     android:fontFamily="sans-serif-condensed" 
     android:gravity="left" 
     android:text="@string/tvIP" 
     android:textColor="#1534e3" 
     android:textSize="22sp"/> 

    <EditText 
     android:id="@+id/etIP" 
     android:layout_width="150dp" 
     android:fontFamily="sans-serif-condensed" 
     android:gravity="left" 
     android:hint="dir ip" 
     android:inputType="text" 
     android:singleLine="true" 
     android:textColor="#008caf" 
     android:textSize="20sp" /> 
</TableRow> 

<!-- fila para el puerto --> 

<TableRow 
    android:id="@+id/tableRowPuerto" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/tvPuerto" 
     android:layout_width="40dp" 
     android:fontFamily="sans-serif-condensed" 
     android:gravity="left" 
     android:text="Puerto" 
     android:textColor="#1534e3" 
     android:textSize="22sp" /> 

    <EditText 
     android:id="@+id/etPuerto" 
     android:layout_width="60dp" 
     android:fontFamily="sans-serif-condensed" 
     android:gravity="start" 
     android:hint="puerto" 
     android:inputType="number" 
     android:singleLine="true" 
     android:textColor="#008caf" 
     android:textSize="20sp" /> 
</TableRow> 

<!-- fila para el boton conectar --> 

<TableRow 
    android:id="@+id/tableRowConectar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="right" > 

     <!-- 
     se requiere un frameLayout para poder redimensionar el boton y posicionarlo donde 
     se desea, ya que el tableRow bloquea estos aspectos. 
     --> 
     <Button 
      android:id="@+id/btConectar" 
      android:layout_width="135dp" 
      android:layout_height="45dp" 
      android:layout_gravity="end" 
      android:background="@drawable/shapebutton" 
      android:fontFamily="sans-serif-condensed" 
      android:text="@string/btConectar" 
      android:textColor="#FFFFFF" 
      android:textSize="18sp" 
      /> 
</TableRow> 
<!-- fila para la respuesta del servidor cuando conecta --> 
<TableRow 
    android:id="@+id/tableRowRespuesta" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="left" > 

    <TextView 
     android:id="@+id/tvRespuesta" 
     android:layout_width="120dp" 
     android:fontFamily="sans-serif-condensed" 
     android:gravity="left" 
     android:textColor="#009688" 
     android:textSize="20sp" /> 
</TableRow>`</TableLayout> </RelativeLayout>` 

Ceci est la sortie logcat lorsque j'appuie sur le bouton:

12-21 21:32:16.628 29269-29269/com.example.daviddiez.clientearduinotab D/GestureDetector: [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 2 mFalseSizeCnt:0 

La méthode que le bouton doit appeler:

public void eventoConectar(View v){ 
    Log.i(TAG,"eventoConectar"); 

    String port = metPuerto.getText().toString(); 
    puerto = Integer.parseInt(port); 
    ip = metIP.getText().toString(); 
    SavePrefs sp = new SavePrefs(); 
    sp.guardarPreferencias(ip, puerto, super.getActivity()); 
    WifiManager mWifiManager = (WifiManager) super.getActivity().getSystemService(Context.WIFI_SERVICE); 
    status = mWifiManager.isWifiEnabled(); 
    vista = v; 
    Log.i(TAG, "status wifi " + status); 
    cas = new ConnectAndroidServer(ip, puerto, cont,ClienteActivity.this); 
    cas.delegate = this; 
    if (status == false) {//si el status de conexion es falso, se le pregunta al usuario si desea activar la wifi, 
     //salir, o no activar. 
     mostrarDialog(vista, " necesita Activar la conexion WiFi", 
       "Salir"); 
    } else { 
     cas.execute(); 
     Log.i(TAG, "lanzado AsyncTask"); 

     primerConexion=true; 
    } 

    new ProgramadorConexion(ClienteActivity.this); 
} 

est ici capture d'écran du premier fragment sur la gauche et la capture d'écran du deuxième fragment avec des boutons de travail sur la gauche:

screen shot from first fragment screen shot from second fragment with working buttons

volet montrer onglets différents points de vue.

public class TabActivity extends AppCompatActivity { 

    private SectionsPagerAdapter mSectionsPagerAdapter; 
    private ViewPager mViewPager; 

    ClienteActivity clienteActivity; 
    private static final String TAG="1-TabActivity"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_tab); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 


     mViewPager = (ViewPager) findViewById(R.id.container); 
     mViewPager.setPageTransformer(true,new ZoomOutPageTransformer()); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(mViewPager); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_tab, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     private static final String ARG_SECTION_NUMBER = "section_number"; 

     public PlaceholderFragment() { 
     } 

     /** 
     * Returns a new instance of this fragment for the given section 
     * number. 
     */ 
     public static PlaceholderFragment newInstance(int sectionNumber) { 
      PlaceholderFragment fragment = new PlaceholderFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 


     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      Log.i(TAG,"onCreateView"); 

      View rootView = inflater.inflate(R.layout.activity_cliente, container, false); 
      //TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
      //textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
      return rootView; 
     } 
    } 

    /** 
    * A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
    * one of the sections/tabs/pages. 
    */ 
    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      Log.i(TAG,"getItem position"+position); 
      switch (position){ 
       case 0: 
        Log.i(TAG,"getItem case 0"); 
        return PlaceholderFragment.newInstance(position + 1); 
        //return PlaceholderFragment.newInstance(position + 1); 
       case 1: 
        Log.i(TAG,"getItem case 1"); 
        //ClienteActivity ca=new ClienteActivity(); 
        SwitchingActivity sa2=new SwitchingActivity(); 
        //return PlaceholderFragment.newInstance(position + 1); 
        return sa2; 
       case 2: 
        Log.i(TAG,"getItem case 2"); 
        SwitchingActivity sa=new SwitchingActivity(); 
        return sa; 
      } 
      // 
      return null; 
     } 
     @Override 
     public int getCount() { 
      // Show 3 total pages. 
      return 3; 
     } 
     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return "Servidor"; 
       case 1: 
        return "Control"; 
       case 2: 
        return "SECTION 3"; 
      } 
      return null; 
     } 
    } 
} 
+0

J'ai fait les changements, mais encore, rien ne se passe. Je reçois le même logcat pour le bouton. –

+0

Veuillez modifier votre code avec les dernières modifications –

+0

done @ cricket_007 –

Répondre

0

Pourquoi utilisez-vous ?:

super.getActivity().findViewById(R.id.btConectar); 

Remplacer pour:

rootView.findViewById(R.id.btConectar); 
+0

déjà changé, mais rien encore. –

+1

@DavidDiez Pouvez-vous partager votre code de méthode 'eventoConectar (View view)'? – user5195185

+0

ok, pas de problème, @ user5195185. –

0

Eh bien, après avoir cherché une raison de l'échec sur le bouton, je trouve ceci: je devez insenter le fragment sur la méthode getItem(). La modification de cette partie du code:

@Override 
    public Fragment getItem(int position) { 
     Log.i(TAG,"getItem position"+position); 
     switch (position){ 
      case 0: 
       Log.i(TAG,"getItem case 0"); 
       return PlaceholderFragment.newInstance(position + 1); 
       //return PlaceholderFragment.newInstance(position + 1); 
      case 1: 
       Log.i(TAG,"getItem case 1"); 
       //ClienteActivity ca=new ClienteActivity(); 
       SwitchingActivity sa2=new SwitchingActivity(); 
       //return PlaceholderFragment.newInstance(position + 1); 
       return sa2; 
      case 2: 
       Log.i(TAG,"getItem case 2"); 
       SwitchingActivity sa=new SwitchingActivity(); 
       return sa; 
     } 
     // 
     return null; 
    } 

pour cela:

 @Override 
    public Fragment getItem(int position) { 
     Log.i(TAG,"getItem position"+position); 
     switch (position){ 
      case 0: 
       Log.i(TAG,"getItem case 0"); 
       ClienteActivity ca=new ClienteActivity(); 
       return ca; 
      case 1: 
       Log.i(TAG,"getItem case 1"); 
       SwitchingActivity sa2=new SwitchingActivity(); 
       return sa2; 
      case 2: 
       Log.i(TAG,"getItem case 2"); 
       SwitchingActivity sa=new SwitchingActivity(); 
       return sa; 
     } 
     // 
     return null; 
    } 

Faire ce changement sur le bouton et tout le travail reste parfaitement. Merci @ cricket_007 et d'autres pour votre aide dans ce domaine.