Android

【Android】ButterKnifeライブラリのサンプル③List

ButterKnifeのサンプルアプリです。
今回使うのは、ListViewではなくRecyclerViewです。

説明

まずViewHolderの中にButterKnife.bindを呼び出します。
それ以降は@BindViewや@OnClickは普段通りの使い方です。
基本的にAdapter(ListViewなど)で使う場合はこれだけです。

 class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.list_item_text)TextView textView;
        @BindView(R.id.relative_layout)RelativeLayout relativeLayout;

        public ViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }

        @OnClick(R.id.image_view)
        public void onClick() {
            relativeLayout.setBackgroundColor(ContextCompat.getColor(mContext,R.color.aqua));
        }
    }
サンプル

リストの画像をクリックしたら、背景の色が変化するサンプルです。
fragment_list.xml

<FrameLayout 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">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

list_item_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="70sp"
    android:background="@color/white">

    <TextView
        android:id="@+id/list_item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="test"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_marginLeft="10dp"
        android:layout_centerVertical="true"
        android:textColor="@color/black"/>

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@mipmap/ic_launcher_round"
        android:layout_alignParentRight="true"/>

</RelativeLayout>

RecyclerViewAdapter.java

public class RecyclerViewAdapter extends RecyclerView.Adapter {
    private LayoutInflater mInflater;
    private ArrayList mData;
    private Context mContext;

    public RecyclerViewAdapter(Context context, ArrayList data) {
        mInflater = LayoutInflater.from(context);
        mData = data;
        mContext = context;
    }

    @Override
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        return new ViewHolder(mInflater.inflate(R.layout.list_item_layout, viewGroup, false));
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {
        viewHolder.textView.setText(mData.get(i));
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.list_item_text)TextView textView;
        @BindView(R.id.relative_layout)RelativeLayout relativeLayout;

        public ViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }

        @OnClick(R.id.image_view)
        public void onClick() {
            relativeLayout.setBackgroundColor(ContextCompat.getColor(mContext,R.color.aqua));
        }
    }
}

ListFragment.java

 
    private ArrayList strings;
    @BindView(R.id.recycler_view)RecyclerView recyclerView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        strings = new ArrayList<>();
        strings.add("大阪");
        strings.add("奈良");
        strings.add("京都");
        strings.add("兵庫");
        strings.add("和歌山");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_list, container, false);
        ButterKnife.bind(this, view);

        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(getContext(), strings);
        recyclerView.setAdapter(adapter);

        return view;
    }

サンプルのスクリーンショットです。

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です