2015-09-09 27 views

risposta

20

Android NOTE è un framework di annotazione-driven che consente di semplificare il codice nelle applicazioni e riduce il testo standard di modelli comuni, come l'impostazione ascoltatori click, far rispettare ui/sfondo esecuzioni thread, ecc

Si potrebbe andare da avere qualcosa di simile:

public class MainActivity extends AppCompatActivity { 

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

     final TextView descriptionTextView = (TextView) findViewById(R.id.tv_description); 
     final Button hideButton = (Button) findViewById(R.id.btn_hide); 
     hideButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       descriptionTextView.setVisibility(View.INVISIBLE); 
      } 
     }); 
    } 
} 

Per qualcosa di simile:

@EActivity(R.layout.activity_main) 
public class MainActivity extends AppCompatActivity { 

    @ViewById(R.id.tv_description) 
    TextView mDescriptionTextView; 

    @Click(R.id.btn_hide) 
    protected void onHideButtonClick() { 
     mDescriptionTextView.setVisibility(View.INVISIBLE); 
    } 
} 

Come funziona

di annotare le attività e componenti, il processore annotazioni poi genera le classi (in fase di compilazione) che estendono le attività e componenti (vale a dire le tue attività non possono essere definitive) con un suffisso di sottolineatura di default, quindi se hai MainActivity, ora avrai anche una classe MainActivity_.

Questa nuova classe contiene un codice boilerplate ben scritto che fa tutto ciò che specifica l'annotazione.

Come implementare

ho scritto questo tutorial su come integrare Android annotazioni e includere anche un esempio di come i test di integrazione vengono aggiornate, check here.

Quel tutorial è valido fino ad oggi, utilizzando Android Studio ~ 1.5.1, e tenta di spiegare un po 'come funziona l'interno.

Si deve utilizzare?

Direi che se si ha un progetto medio-piccolo va bene. Renderà il tuo codice più facile da leggere. Ma se la tua applicazione è più grande e contiene molti flussi di navigazione con cicli di attività/componenti complessi, può essere un po 'difficile da implementare o difficile da eseguire il debug e comprendere gli errori se qualcosa non è correttamente annotato.

A causa di come annotazioni Android operare, si incorporare nel ciclo di vita e così facendo, si sono ora dipendenti del loro ciclo di vita (ad esempio, se di annotare le vostre opinioni con @ViewById, allora non è possibile fare riferimento a onCreate(), è è necessario creare un metodo e annotarlo con @AfterViews e quando questo metodo viene eseguito, le visualizzazioni sono pronte per essere utilizzate). Questo non è necessariamente un problema, devi solo avere una buona conoscenza dei comportamenti di Android e dei comportamenti di Annotazioni Android.

In sintesi, come in qualsiasi libreria, se si dipende da esso, bene si dipende da esso, quindi si potrebbe anche capire molto bene come funziona. Il tuo progetto ora dipende da qualcun altro.

4

Non uso annotazioni Android, non più. Quando ho usato questa libreria, è stata bacata e ha fatto il debug di un incubo. Un altro svantaggio è che riduce la portabilità del tuo codice. Se stai lavorando da solo al progetto, allora va bene, non hai questo problema, ma quando lavori in una squadra, devi pensarci due volte.

Se si desidera utilizzarlo, ci sono un sacco di tutorial proprio su their site.

Un'alternativa: Se si desidera ridurre la quantità di codice pur semplificando l'utilizzo e la comprensione, suggerisco la libreria Butter Knife. Io uso è molto e non ho riscontrato alcun bug fino ad ora. Molto facile da usare e da leggere.

1

Le annotazioni Android sono librerie di terze parti create per essere tutte in uno strumento per Android. È capace di iniezione di dipendenza, gestione dei thread e altro ancora. Non consiglio di usarlo; è buggy e instabile. Nel mio attuale lavoro sto lavorando a un progetto e il mio compito è rimuovere le annotazioni Android. Suggerirei di usare Dagger 2, Butterknife e RxJava

1

Android Annotations è una libreria che "genera automaticamente" il codice per noi utilizzando alcuni attributi o anotazioni come @EActivity, @ViewById, @OnClick. Ha lo scopo di facilitare e ridurre i tempi di programmazione.

"AndroidAnnotations è un framework Open Source che accelera lo sviluppo di Android, si occupa dell'idraulico e consente di concentrarsi su ciò che è veramente importante. Semplificando il codice, facilita la manutenzione."

(Documentazione qui: https://github.com/excilys/androidannotations/wiki)

Ma ... Noi non usiamo, Sono completamente d'accordo con DDsix risposta. Utilizza i principi SOLIDI e codifica cosa dovrebbe essere codificato quando e dove dovrebbe essere ...

2

Ecco l'esempio con Android Studio.

  1. Creare un progetto Android con il modello "Empty Activity".
  2. Modificare il project_root/build.gradle

    buildscript { 
        repositories { 
         jcenter() 
        } 
        dependencies { 
         classpath 'com.android.tools.build:gradle:1.5.0' 
    ==>  classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
        } 
    } 
    
    allprojects { 
        repositories { 
         jcenter() 
    ==>  maven { 
    ==>   url = 'https://oss.sonatype.org/content/repositories/snapshots' 
    ==>  } 
        } 
    } 
    
  3. Edit app/build.gradle

    apply plugin: 'com.android.application' 
    apply plugin: 'android-apt' <============ 
    
    android { 
        compileSdkVersion 23 
        buildToolsVersion "23.0.2" 
    
        defaultConfig { 
         applicationId "com.just.myapplication" 
         minSdkVersion 19 
         targetSdkVersion 23 
         versionCode 1 
         versionName "1.0" 
        } 
        buildTypes { 
         release { 
          minifyEnabled false 
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
         } 
        } 
    } 
    
    dependencies { 
        compile fileTree(dir: 'libs', include: ['*.jar']) 
        testCompile 'junit:junit:4.12' 
        compile 'com.android.support:appcompat-v7:23.1.1' 
    
    ==> apt "org.androidannotations:androidannotations:4.0-SNAPSHOT" 
    ==> compile 'org.androidannotations:androidannotations-api:4.0-SNAPSHOT' 
    } 
    
  4. Aggiungere un TextView e un pulsante nella pagina principale, activity_main.xml

    <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Not Click Yet" 
        android:id="@+id/textView"/> 
    
    <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:id="@+id/button" 
        android:text="Click" 
        android:layout_below="@+id/textView" /> 
    

  5. Modificare il nome dell'attività in "MainActivity_" in AndroidManifest.xml

    <application 
        android:allowBackup="true" 
        android:icon="@mipmap/ic_launcher" 
        android:label="@string/app_name" 
        android:supportsRtl="true" 
        android:theme="@style/AppTheme"> 
    ==> <activity android:name=".MainActivity_"> 
         <intent-filter> 
          <action android:name="android.intent.action.MAIN"/> 
    
          <category android:name="android.intent.category.LAUNCHER"/> 
         </intent-filter> 
        </activity> 
    </application> 
    

  6. Ora, il vostro MainActivity.java potrebbe essere semplificata, come di seguito

    package com.just.myapplication; 
    
    import android.support.v7.app.AppCompatActivity; 
    import android.widget.TextView; 
    
    import org.androidannotations.annotations.Click; 
    import org.androidannotations.annotations.EActivity; 
    import org.androidannotations.annotations.ViewById; 
    
    @EActivity (R.layout.activity_main) 
    public class MainActivity extends AppCompatActivity { 
    
        @ViewById(R.id.textView) 
        TextView mText; 
    
        @Click 
        void button() { 
         mText.setText("Button Clicked!"); 
        } 
    } 
    
  7. provo a farlo funzionare con un dispositivo o un emulatore per vedere come semplice funziona.

+0

Grazie alla sua veramente utile, ma dovremo tenere a mente 2 cose 1- Per chiamare MainActivity utilizzando qualsiasi parte file Java dovremo utilizzare il nome MainActivity_ invece di progetto MainActivity 2- sincronizzazione con i file Gradle dopo la pulizia della progetto se c'è qualche problema – priyanka

Problemi correlati