[アンドロイド] アンドロイドで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
こんにちはNguyenvanquan7826 ,
メソッドを呼び出すときに自問してみてRemoveItem(getAdapterPosition()) 上記、渡されたパラメータが位置であります. 自分でテストの両方getAdapterPosition() とgetLayoutPosition() 同じRecyclerViewに表示される結果. だから、自分自身の別のポイントを尋ねます 2 方法getAdapterPosition() とgetLayoutPosition() 何 ?
これは、もう少し複雑です.
あなたは、長い計算されたデータをロードするため、より多くのデータと時間があるとき (そのようなあなたがGmailにロードする場合など) その後、データアダプタが変化しているが、インターフェイスではありません. その期間中ホールド異なります 2 この方法.
あなたはもっとここで読むことができます:
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#getAdapterPosition()
おかげnguyenvanquan7826 !
やあ、お兄さん. キッズ用
ビューviewItem = LayoutInflater.from(コンテキスト).膨らまします(R.layout.layout_item_news_feed, 親, 偽);
試験は、インターフェイス上のスペースです.
また、使用
ビューviewItem = LayoutInflater.from(コンテキスト).膨らまします(R.layout.layout_item_news_feed, ヌル);
それは大丈夫です. どうやら修正されませんでした.
彼は私に先生を助け答えます. ありがとうございます!