Rask tips Bruk smørkniv til å injisere visninger på Android

I dette raske tipset lærer du hvordan du integrerer Butter Knife-biblioteket i prosjektene dine, slik at du enkelt kan ordne visningene i oppsettet i programmets kode.

Introduksjon

I alle Android-applikasjoner må du bruke findViewById () metode for hver visning i layoutet du vil bruke i programmets kode. Men som applikasjonsdesign blir mer komplekse oppsett, blir samtalen til denne metoden repeterende, og dette er hvor Butter Knife-biblioteket kommer inn.

Butter Knife-biblioteket, utvikler og vedlikeholdt av Jake Wharton (Square Inc.), har kommentarer som hjelper utviklere til å instantiere visningene fra vår aktivitet eller fragment. Det har også kommentarer til å håndtere hendelser som ved trykk()onLongClick (), etc.

I prøveprosjektet i denne opplæringen kan du se et eksempelprogram med en aktivitet og ett fragment med en implementering ved hjelp av Butter Knife-biblioteket og en vanlig implementering. La oss utforske trinnene som er involvert for å integrere Butter Knife-biblioteket.

1. Bruke Butter Knife Library

Trinn 1: Legg til avhengigheten

Legg til følgende avhengighet til prosjektets build.gradle fil:

kompilere 'com.jakewharton: butterknife: 6.1.0'

Synkroniser deretter prosjektet ditt med denne filen ved å trykke på synkroniserings-knappen.

Trinn 2: Bruk kommentarene

I hver aktivitet eller fragment må du fjerne eller kommentere alle anrop av findViewById () metode og legg til @InjectView annotasjon før deklarasjonen av variabelen, som angir identifikatoren for visningen.

@InjectView (R.id.sample_textview) TextView sample_textview;

Trinn 3: Injiser visninger

onCreate () metode for aktiviteten, før du bruker noen visninger, anrop injisereSmørkniv gjenstand.

ButterKnife.inject (this);

Hvis du bruker fragmenter, må du angi kilden til visningene i onCreateView () metode som vist nedenfor.

View view = inflater.inflate (R.layout.sample_fragment, null); ButterKnife.inject (dette, visning);

Du kan nå begynne å bruke visningene i programmets kode. Butter Knife vil håndtere instantiation av hver enkelt visning for deg.

Det er alt du trenger å gjøre for å bruke Butter Knife-biblioteket i en aktivitet eller et fragment. I neste avsnitt skal jeg vise deg hvordan du bruker Butter Knife-biblioteket for å bruke listevisninger.

2. Bruk Butter Knife Library med Listevisninger

De Listevisning klassen er et spesielt tilfelle å implementere, fordi du instantierer visningene inne i en adapter. For å integrere Butter Knife-biblioteket i en listevisning må du først opprette egendefinert layout for elementene i listevisningen. Jeg skal nevne min LIST_VIEW_ITEM og legg til følgende layout:

    

I dette enkle oppsettet skal vi vise et bilde og litt tekst. Deretter må vi opprette adapteren for listevisningen. La oss nevne det ListViewAdapter.

offentlig klasse ListViewAdapter utvider BaseAdapter LayoutInflater inflater; offentlig ListViewAdapter (LayoutInflater inflater) this.inflater = inflater;  @Override public int getCount () return 5;  @Override public Object getItem (int posisjon) return null;  @ Overstyr offentlig, long getItemId (int posisjon) return 0;  @ Overstyr offentlig visning getView (int posisjon, Vis convertView, ViewGroup forelder) return null;  statisk klasse ViewHolder public ViewHolder (View view) 

Inne i adapterklassen er det en statisk klasse som heter ViewHolder å holde det i orden. Vi skal bruke denne klassen til å inneholde visningene. La oss implementere ViewHolder klassen som følger:

statisk klasse ViewHolder @InjectView (R.id.image_in_item) ImageView-bilde; @InjectView (R.id.textview_in_item) TextView-tekst; offentlig ViewHolder (View view) ButterKnife.inject (dette, visning); 

Alt vi må gjøre nå er å endre getView () metode som følger:

offentlig visning getView (int posisjon, se convertView, ViewGroup foreldre) ViewHolder holder; View view = inflater.inflate (R.layout.list_view_item, foreldre, false); holder = ny ViewHolder (visning); Picasso.with (inflater.getContext ()) .load ("http://lorempixel.com/200/200/sports/" + (posisjon + 1)) .into (holder.image); holder.text.setText ("Dette er en tekst for bildenummeret:" + posisjon); returnere visning; 

I denne metoden blåser jeg opp tilpassede layoutet inni utsikt variabel og bruk den til å opprette et objekt av ViewHolder klasse. Legg merke til at vi bruker Picasso klasse for å laste eksterne bilder og fylle tekstvisningen med litt tekst. Du kan finne Picasso-opplæringen nyttig hvis du vil bli kjent med dette biblioteket.

Ikke glem å legge til android.permission.INTERNET tillatelse i Android-manifestet. Hvis du ikke gjør det, kan Picasso ikke koble til nettet og laste de eksterne bildene.

Til slutt, alt du trenger å gjøre er å ordne listevisningen og feste adapteren. Jeg skal gjøre dette i en ny aktivitet, ListViewActivity, som vist under. Du kan se et eksempel på denne implementeringen i kildefilene i denne opplæringen.

offentlig klasse ListViewActivity utvider ActionBarActivity @InjectView (R.id.listView) ListView-listen; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_list_view); ButterKnife.inject (this); list.setAdapter (ny ListViewAdapter ((LayoutInflater) getSystemService (LAYOUT_INFLATER_SERVICE))); 

3. Hendelser

Du kan også bruke Butter Knife's kommentarer til arrangementer. Velg annotasjonen du vil bruke, i henhold til hendelsen du vil svare, og sett den før metoden du vil utføre når hendelsen skjer.

@OnClick (R.id.sample_textview) public void showToastMessage () Toast.makeText (MainActivity.this, "Dette er en melding fra aktiviteten", Toast.LENGTH_SHORT) .show (); 

Konklusjon

Du kan bruke Butter Knife injisere () metode hvor som helst du ellers ville bruke findViewById () Metode for å spare tid og unngå kodrepetisjon når du må instantiere visningene i oppsettet. Du er velkommen til å dele denne hurtige tipsen hvis du har funnet det nyttig.