Snabbtips Använd smörkniv för att injicera visningar på Android

I det här snabba tipset lär du dig hur du integrerar Butter Knife-biblioteket i dina projekt för att enkelt ordna visningarna i din layout i programmets kod.

Introduktion

I alla Android-applikationer måste du använda findViewById () metod för varje vy i layouten som du vill använda i programmets kod. Men som applikationsdesign får mer komplexa layouter blir samtalet till den här metoden repeterande och det är här Butter Knife-biblioteket kommer in.

Butter Knife-biblioteket, utvecklaren och underhålls av Jake Wharton (Square Inc.), har kommentarer som hjälper utvecklare att instansera synpunkterna från vår aktivitet eller fragment. Det har också anteckningar för att hantera händelser som onClick ()onLongClick (), etc.

I provprojektet i den här handledningen kan du se ett provprogram med en aktivitet och ett fragment med en implementering med Butter Knife-biblioteket och en regelbunden implementering. Låt oss undersöka de steg som är inblandade för att integrera Butter Knife-biblioteket.

1. Använda Butter Knife Library

Steg 1: Lägg till beroende

Lägg till följande beroende av projektets build.gradle fil:

kompilera 'com.jakewharton: butterknife: 6.1.0'

Synkronisera sedan ditt projekt med den här filen genom att trycka på synkroniserings-knappen.

Steg 2: Använd anteckningarna

I varje aktivitet eller fragment måste du ta bort eller kommentera varje uppringning av findViewById () metod och lägg till @InjectView anteckning före deklarationen av variabeln, vilket indikerar identifieringen av vyn.

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

Steg 3: Injicera synpunkter

onCreate () Metod för aktiviteten, innan du använder några åsikter, ring upp injiceraSmörkniv objekt.

ButterKnife.inject (detta);

Om du använder fragment måste du ange källan till vyerna i onCreateView () metod som visas nedan.

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

Du kan nu börja använda visningarna i programmets kod. Butter Knife hanterar instantiation av varje enskild syn för dig.

Det är allt du behöver göra för att använda Butter Knife-biblioteket i en aktivitet eller ett fragment. I nästa avsnitt visar jag dig hur du använder Butter Knife-biblioteket för att använda listvisningar.

2. Använda Butter Knife Library med listvisningar

De Listvy klassen är ett speciellt fall att implementera, eftersom du instanserar synpunkterna inuti en adapter. För att integrera Butter Knife-biblioteket i en listvy måste du först skapa den anpassade layouten för objekten i listvisningen. Jag ska namnge mina LIST_VIEW_ITEM och lägg till följande layout:

    

I den här enkla layouten kommer vi att visa en bild och lite text. Därefter måste vi skapa adapteren för listvy. Låt oss namnge det ListViewAdapter.

Public Class ListViewAdapter utökar BaseAdapter LayoutInflater inflater; offentlig ListViewAdapter (LayoutInflater inflater) this.inflater = inflater;  @Override public int getCount () return 5;  @Override public Object getItem (int position) return null;  @Override public long getItemId (int position) return 0;  @Override public Visa getView (int position, Visa convertView, ViewGroup förälder) return null;  statisk klass ViewHolder public ViewHolder (View view) 

Inne i adaptern klassen kallas en statisk klass ViewHolder att hålla det i ordning. Vi ska använda den här klassen för att innehålla synpunkter. Låt oss genomföra ViewHolder klass enligt följande:

statisk klass ViewHolder @InjectView (R.id.image_in_item) ImageView-bild; @InjectView (R.id.textview_in_item) TextView text; public ViewHolder (View view) ButterKnife.inject (detta, visa); 

Allt vi behöver göra nu är att ändra getView () metod enligt följande:

offentliga Visa getView (int position, Visa convertView, ViewGroup förälder) ViewHolder-hållare; View view = inflater.inflate (R.layout.list_view_item, förälder, false); innehavare = ny ViewHolder (visa); Picasso.with (inflater.getContext ()) .load ("http://lorempixel.com/200/200/sports/" + (position + 1)) .into (holder.image); holder.text.setText ("Detta är en text för bildnumret:" + position); returnera vy; 

I denna metod blåser jag den anpassade layouten inuti se variabel och använd den för att skapa ett objekt av ViewHolder klass. Observera att vi använder Picasso klass för att ladda fjärranslutna bilder och fylla i textvisningen med lite text. Du kan hitta Picasso-handledningen användbar om du vill bli mer bekant med det här biblioteket.

Glöm inte att lägga till android.permission.INTERNET tillstånd i Android-manifestet. Om du inte gör det kan Picasso inte ansluta till webben och ladda de avlägsna bilderna.

Slutligen är allt du behöver göra för att ordna listvy och fästa adaptern. Jag ska göra detta inom en ny aktivitet, ListViewActivity, enligt nedanstående. Du kan se ett exempel på denna implementering i källfilerna i denna handledning.

public class ListViewActivity utökar ActionBarActivity @InjectView (R.id.listView) ListView list; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_list_view); ButterKnife.inject (detta); list.setAdapter (ny ListViewAdapter ((LayoutInflater) getSystemService (LAYOUT_INFLATER_SERVICE))); 

3. Händelser

Du kan också använda Butter Knifes anteckningar för evenemang. Välj den anteckning du vill använda, beroende på händelsen du vill svara, och sätt den före den metod du vill utföra när händelsen händer.

@OnClick (R.id.sample_textview) public void showToastMessage () Toast.makeText (MainActivity.this, "Detta är ett meddelande från aktiviteten", Toast.LENGTH_SHORT) .show (); 

Slutsats

Du kan använda smörkniv injicera() metod där du annars skulle använda findViewById () metod för att spara tid och undvika kodrepetition när du måste instansera visningarna i layouten. Du är gärna delaktig i denna snabba tips om du tycker att den är till hjälp.