[アンドロイド] アンドロイドでRecyclerView

みなさん、こんにちは, 長い長い時間がないブログ, この記事で私は、Android RecyclerViewを使用しての基礎を紹介し、お教えします.

RecyclerViewは何ですか

RecyclerViewのようなアンドロイドで新しいビューです リストビュー しかし、非常に強いです.
RecyclerViewは、私たちはより多くのデータのリストビューをロードすることができます, 滑らかな爪, より良い効果と、リスト内の要素の多様なレイアウトをサポートしています.

EclipseでRecyclerViewを使用します

使用するマシンを知っていないではない、まだスムーズで信頼性の高いAndroidのメーカーです “妻” 彼女のそれが有効になってAndroidのメーカーを点火することができます. だから私は、Eclipseは十分である使用しました. しかし、ガイドのほとんどは、今、あなたはあなたのAndroidスタジオで行う必要がある注意事項は、あなたが持っているものにこれを追加しています “急場” 彼女のような.

あなたはディレクトリにSDKと心ディレクトリに移動します: 22.1.1 アンドロイド m2repository COM アンドロイドサポートのrecyclerview-V7 SDKのエクストラ (ディレクトリ 22.1.1 彼のバージョンが使用するSDK, あなたの長いは、そのディレクトリにユーザーを行います) あなたは、ファイルが表示されます recyclerview-v7-22.1.1.aar, あなたが別の場所にコピーします, その名前を変更します recyclerview-v7-22.1.1.zip (Windowsを使用している場合は、その尾を表示することを忘れないでください) あなたが見つける抽出 1 ファイル classes.jar, これは、必要に応じて、当社のライブラリファイルです. あなたがキャッチーなのためにその名前を変更することができます, それを自分で変更します recyclerview.jar. あなたは、フォルダにコピー LIB プロジェクトが終了します.

AndroidのスタジオでRecyclerViewを使用

あなたは、Androidを使用する場合は、スタジオは、地球局と述べました, 私は、あなたがファイルのGradleに以下を追加することができることを確認していません:

compile 'com.android.support:recyclerview-v7:21.0.+'

RecyclerViewリストによって生成されたコード

まず、いつものようにプロジェクトを作成します, 私たちはコードを開始終了…

XMLインタフェース

最初のラグインターフェース 1 リスト内の要素は、テキストが含まれており、 1 削除ボタン. ファイル item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:paddingLeft="8dp"
    android:paddingRight="8dp" >

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:layout_weight="1" />

    <ImageButton
        android:id="@+id/btn_delete"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:src="@drawable/ic_delete" />

</LinearLayout>

上記のコードで

その後、活動からなるインターフェイスを作成 1 テキストを入力するのEditText, 1 ボタンの追加, と表示リストRecyclerView. ファイル activity_main.xml

<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/edit_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="name" />

        <Button
            android:id="@+id/btn_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Add" />
    </LinearLayout>

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

</LinearLayout>

コー​​ドハンドルのJava

まず、データのデータが含まれているクラスを作成します 1 要素, この例では、一人で自分の名前. ファイル Data.java

package cachhoc.net.samplerecyclerview;

public class Data {
	private String name;

	public Data(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

フォロー, ときのような リストビューをカスタマイズします, 我々は、作成する必要があります 1 別のアダプター. そして、ここでは、あまりにも, 我々が作成します 1 Recyclerview用アダプター. ファイル CustomRecyclerAdapter.java

package cachhoc.net.samplerecyclerview;

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

import cachhoc.net.samplerecyclerview.CustomRecyclerAdapter.RecyclerViewHolder;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;

public class CustomRecyclerAdapter extends
		RecyclerView.Adapter<RecyclerViewHolder> {

	private List<Data> listData = new ArrayList<Data>();

	public CustomRecyclerAdapter(List<Data> listData) {
		this.listData = listData;
	}

	public void updateList(List<Data> data) {
		listData = data;
		notifyDataSetChanged();
	}

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

	@Override
	public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup,
			int position) {
		LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
		View itemView = inflater.inflate(R.layout.item, viewGroup, false);
		return new RecyclerViewHolder(itemView);
	}

	@Override
	public void onBindViewHolder(RecyclerViewHolder viewHolder, int position) {
		viewHolder.tvName.setText(listData.get(position).getName());
	}

	public void addItem(int position, Data data) {
		listData.add(position, data);
		notifyItemInserted(position);
	}

	public void removeItem(int position) {
		listData.remove(position);
		notifyItemRemoved(position);
	}

	/**
	 * ViewHolder for item view of list
	 * */

	public class RecyclerViewHolder extends RecyclerView.ViewHolder implements
			OnClickListener {

		public TextView tvName;
		public ImageButton btnDelete;

		public RecyclerViewHolder(View itemView) {
			super(itemView);
			tvName = (TextView) itemView.findViewById(R.id.tv_name);
			btnDelete = (ImageButton) itemView.findViewById(R.id.btn_delete);

			// set listener for button delete
			btnDelete.setOnClickListener(this);
		}

		// remove item when click button delete
		@Override
		public void onClick(View v) {
			removeItem(getAdapterPosition());
		}
	}

}

あなた上記のコードではほとんど注目, その他のリストビューにその.
方法 onCreateViewHolder リストビューを使用している場合getViewメソッドは、同様の機能を持っています, それは、インターフェイスに追求することです 1 要素, あります item.xml 上に構築されたが、我々が戻ったときに返さ RecyclerViewHolder.

方法 onBindViewHolder 要素に値を設定するために呼び出さ.

RecyclerViewHolder た 1 クラスは、要素が持つ属性が含まれています (テキスト名のVAボタン削除). RecyclerViewHolderではまた、我々はここで削除ボタンのイベントを起動し、キャプチャイベントに入力されていませんことをonCreateViewHolder我々は場所を知っている必要がありますので注意してください (ポジション) メソッドを介して、 getAdapterPosition むしろonCreateViewHolderでキャプチャよりもエラーの原因になります.

最後にMainActivityのコードを記述. この1つは簡単にRUI. ファイル MainActivity.java

package cachhoc.net.samplerecyclerview;

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

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener {

	private RecyclerView recyclerView;
	private CustomRecyclerAdapter adapter;
	private RecyclerView.LayoutManager layoutManager;

	private EditText editName;

	private List<Data> listData = new ArrayList<Data>();

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

		// connect views.
		editName = (EditText) findViewById(R.id.edit_name);
		recyclerView = (RecyclerView) findViewById(R.id.recycler);

		// If the size of views will not change as the data changes.
		recyclerView.setHasFixedSize(true);

		// Setting the LayoutManager.
		layoutManager = new LinearLayoutManager(this);
		recyclerView.setLayoutManager(layoutManager);

		// Setting the adapter.
		adapter = new CustomRecyclerAdapter(listData);
		recyclerView.setAdapter(adapter);

		// set listener for button add
		((Button) findViewById(R.id.btn_add)).setOnClickListener(this);
	}

	// Called when add button is clicked.
	public void addItem() {

		// get data.
		Data dataToAdd = new Data(editName.getText().toString());

		// Update adapter.
		adapter.addItem(listData.size(), dataToAdd);
	}

	@Override
	public void onClick(View v) {
		addItem();
	}
}

あなたは、プロジェクトをダウンロードすることができます (日食の実装) サンプルRecyclerview