使用ButterKnife实现视图绑定

    使用ButterKnife框架可以方便的使用注解的方式实现视图的绑定、资源的绑定、事件的绑定等等。使用ButterKnife最方便的是视图的绑定从而告别烦琐的通过findViewById()得到view的引用。下面使用一个非常简单的例子来说明一下。

    例子非常简单,使用一个listview显示一个自定义布局。

    主布局activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


</RelativeLayout>

   主布局中需要绑定的view是id/listview

    自定义布局item_layt.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:gravity="center_vertical"
    android:orientation="horizontal">

<ImageView android:id="@+id/item_imageview"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="10dp"/>

    <TextView android:id="@+id/item_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:gravity="center"
        android:textColor="@color/DodgerBlue"/>

</RelativeLayout>

  这个自定义布局是ViewHolder需要的布局,需要绑定的item_imageview和item_textview.

  接下来自定义一个Adapter.

package com.app.wx.butterknifetraning.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.app.wx.butterknifetraning.R;

import java.util.List;
import java.util.Random;

import butterknife.Bind;
import butterknife.ButterKnife;

/**
 * Created by ubuntu on 15-9-1.
 */
public class MyAdapter extends BaseAdapter {
    private int[] drawables = new int[]{R.drawable.mark01, R.drawable.mark02,
            R.drawable.mark03, R.drawable.mark04};
    private Context mContext;
    private List<String> mContents;
    private LayoutInflater mLayoutInflater;

    public MyAdapter(Context context, List<String> contents) {
        this.mContext = context;
        this.mContents = contents;
        mLayoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return mContents.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    //使用ViewHold提高性能
        ViewHolder holder;
        if(convertView != null){
             holder =(ViewHolder) convertView.getTag();
        }else{
            convertView = mLayoutInflater.inflate(R.layout.item_layot, parent, false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        }
        holder.mTextView.setText(mContents.get(position));
        Random random = new Random();
        int index = random.nextInt(drawables.length);
        holder.mImageView.setImageResource(drawables[index]);
        return convertView;
    }


    static class ViewHolder {
        @Bind(R.id.item_imageview)    //绑定imageview
        ImageView mImageView;
        @Bind(R.id.item_textview)     //绑定textview
        TextView mTextView;

        public ViewHolder(View view) {
            ButterKnife.bind(this, view);   //view绑定
          }
    }

}


主MainActivity

package com.app.wx.butterknifetraning;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;

import com.app.wx.butterknifetraning.adapter.MyAdapter;

import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

    @Bind(R.id.listview)    
    ListView mListView;
    private List<String> myList;

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


        MyAdapter adapter = new MyAdapter(this, myList);
        mListView.setAdapter(adapter);

    }

    private void initData() {
        myList = new ArrayList<String>();
        myList.add("item1");
        myList.add("item2");
        myList.add("item3");
        myList.add("item4");
        myList.add("item5");
        myList.add("item6");
        myList.add("item7");
    }

}

通过一个@Bind(R.id.idname),然后使用ButterKnife.bind()就可以使用视图的绑定,非常方便。

你可能感兴趣的:(android,butterknife)