In deze snelle tip leert u hoe u de Butter Knife-bibliotheek in uw projecten kunt integreren om gemakkelijk de weergaven in uw lay-out in de code van uw toepassing te laten verschijnen.
In elke Android-applicatie moet u de findViewById ()
methode voor elke weergave in de lay-out die u in de code van uw toepassing wilt gebruiken. Maar als de ontwerpen van toepassingen complexere lay-outs krijgen, wordt de aanroep van deze methode repetitief en hier komt de Butter Knife-bibliotheek.
De Butter Knife-bibliotheek, ontwikkelaar en onderhouden door Jake Wharton (Square Inc.), heeft annotaties die ontwikkelaars helpen de standpunten van onze activiteit of fragment te tonen. Het heeft ook annotaties om evenementen zoals te behandelen bij klikken()
, onLongClick ()
, enz.
In het voorbeeldproject van deze zelfstudie ziet u een voorbeeldtoepassing met één activiteit en één fragment met een implementatie met de Butter Knife-bibliotheek en een regelmatige implementatie. Laten we de stappen verkennen die nodig zijn om de Butter Knife-bibliotheek te integreren.
Voeg de volgende afhankelijkheid toe aan de projecten build.gradle het dossier:
compileer 'com.jakewharton: butterknife: 6.1.0'
Synchroniseer vervolgens uw project met dit bestand door op de knop synchroniseren te drukken.
In elke activiteit of fragment moet je elke aanroep van de. Verwijderen of erop reageren findViewById ()
methode en voeg de @InjectView
annotatie vóór de declaratie van de variabele, met vermelding van de identifier van de view.
@InjectView (R.id.sample_textview) TextView sample_textview;
In de onCreate ()
methode van de activiteit, voordat u de weergaven gebruikt, telefoontje injecteren
op de Botermes
voorwerp.
ButterKnife.inject (deze);
Als u fragmenten gebruikt, moet u de bron van de views opgeven in de onCreateView ()
methode zoals hieronder getoond.
View view = inflater.inflate (R.layout.sample_fragment, null); ButterKnife.inject (this, view);
U kunt de weergaven nu gebruiken in de code van uw toepassing. Butter Knife zal de instantiatie van elke afzonderlijke weergave voor u afhandelen.
Dat is alles wat u hoeft te doen om de Butter Knife-bibliotheek te gebruiken in een activiteit of fragment. In het volgende gedeelte zal ik u laten zien hoe u de Butter Knife-bibliotheek gebruikt voor het gebruik van lijstweergaven.
De Lijstweergave
class is een speciaal geval dat moet worden geïmplementeerd, omdat u de weergaven in een adapter instantieert. Om de Butter Knife-bibliotheek in een lijstweergave te integreren, moet u eerst de aangepaste lay-out voor de items in de lijstweergave maken. Ik ga de mijne noemen LIST_VIEW_ITEM
en voeg de volgende lay-out toe:
In deze eenvoudige lay-out zullen we een afbeelding en wat tekst laten zien. Vervolgens moeten we de adapter voor de lijstweergave maken. Laten we het een naam geven ListViewAdapter
.
public class ListViewAdapter breidt BaseAdapter uit LayoutInflater-inflater; public ListViewAdapter (LayoutInflater inflater) this.inflater = inflater; @Override openbare int getCount () return 5; @Override public Object getItem (int positie) return null; @Override openbare lange getItemId (int-positie) return 0; @Override openbaar View getView (int position, View convertView, ViewGroup parent) return null; static class ViewHolder public ViewHolder (View view)
Binnen de adapterklasse is er een statische klasse genaamd ViewHolder
om het op orde te houden. We gaan deze klasse gebruiken om de weergaven te bevatten. Laten we het implementeren ViewHolder
klasse als volgt:
static class ViewHolder @InjectView (R.id.image_in_item) ImageView-afbeelding; @InjectView (R.id.textview_in_item) TextView-tekst; openbare ViewHolder (weergave weergeven) ButterKnife.inject (this, view);
Het enige dat we nu hoeven te doen, is het wijzigen van getView ()
methode als volgt:
publiek Bekijk getView (int position, View convertView, ViewGroup parent) ViewHolder holder; Bekijk weergave = inflater.inflate (R.layout.list_view_item, parent, false); houder = nieuwe ViewHolder (weergave); Picasso.with (inflater.getContext ()) .load ("http://lorempixel.com/200/200/sports/" + (position + 1)) .into (holder.image); holder.text.setText ("Dit is een tekst voor het afbeeldingsnummer:" + positie); terugkeer bekijken;
In deze methode blaas ik de aangepaste lay-out in de uitzicht
variabele en gebruik deze om een object van de te maken ViewHolder
klasse. Merk op dat we de gebruiken Picasso
class om externe afbeeldingen te laden en de tekstweergave te vullen met wat tekst. Misschien vindt u de Picasso-tutorial nuttig als u meer vertrouwd wilt raken met deze bibliotheek.
Vergeet niet om de. Toe te voegen android.permission.INTERNET
toestemming in het Android-manifest. Als u dit niet doet, kan Picasso geen verbinding maken met internet en de externe afbeeldingen laden.
Tot slot, alles wat u hoeft te doen is om de lijstweergave te starten en de adapter te bevestigen. Ik ga dit doen binnen een nieuwe activiteit, ListViewActivity
, zoals hieronder getoond. U kunt een voorbeeld van deze implementatie zien in de bronbestanden van deze zelfstudie.
public class ListViewActivity breidt ActionBarActivity uit @InjectView (R.id.listView) ListView-lijst; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_list_view); ButterKnife.inject (deze); list.setAdapter (nieuwe ListViewAdapter ((LayoutInflater) getSystemService (LAYOUT_INFLATER_SERVICE)));
Je kunt ook Butter Knife's annotaties gebruiken voor evenementen. Kies de annotatie die u wilt gebruiken, afhankelijk van de gebeurtenis die u wilt reageren en plaats deze voor de methode die u wilt uitvoeren wanneer het evenement plaatsvindt.
@OnClick (R.id.sample_textview) public void showToastMessage () Toast.makeText (MainActivity.this, "Dit is een bericht van de activiteit", Toast.LENGTH_SHORT) .show ();
Je kunt Butter Knife gebruiken injecteren()
methode waar je anders de findViewById ()
methode om tijd te besparen en codeherhaling te voorkomen wanneer u de views in de lay-out moet instantiëren. Deel deze quick-tip als je hem nuttig vindt.