Android RecycleViewとDataBindingでViewHolder不要?なシンプル開発
触ってみましたRecycleView!
組み合わせてみましたDataBinding!
結論として、ViewHolderが殆ど不要となり、シンプルにできたなーと思ったのでちょっと書いてみます。
注意!
DataBindingの話はあまりしません。
DataBinding使って簡単にRecycleViewが作れるという感じです。
環境
AndroidStudio 3
Java
DataBinding
完成画面
とりあえず、イメージをどん!!
超簡単に作りましたw
RecycleViewのAdapter
とりあえずAdapter全部!!!
/** * RecycleView Adapter * Created by k-kamiya on 2018/02/19. */ public class Adapter extends RecyclerView.Adapter { private List<Model> mModels; /** * コンストラクタ */ public Adapter() { mModels = new ArrayList<>(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // DataBindingクラスの作成 ActivityRowBinding binding = DataBindingUtil.inflate( LayoutInflater.from(parent.getContext()), R.layout.activity_row, parent, false); // RootViewを取得 View rootView = binding.getRoot(); // RootViewのTagにDataBindingを設定 rootView.setTag(binding); // RecycleViewのインスタンス生成、Abstractだたから{}が必要。。。 // 気になるようだったら、別クラスへ! return new RecyclerView.ViewHolder(rootView) {}; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { // ViewHolderのitemViewからonCreateViewHolderで設定したDataBindingClassを取得 ActivityRowBinding binding = (ActivityRowBinding) holder.itemView.getTag(); // ModelとViewのBind binding.setModel(getItem(position)); } @Override public int getItemCount() { return mModels.size(); } public void setModels(List<Model> models) { mModels = models; } public List<Model> getModels() { return mModels; } public Model getItem(int position){ return mModels.get(position); } }
重要ポイント onCreateViewHolder
地味に少ポイントw
引数のparent(ConvertView)からContextを取得すると、
AdapterクラスにContext渡す必要が無い!
DataBindingからRootViewを取得、
その後RootViewのTagにDataBindingを設定!
後は、その場でRecyclerView.ViewHolderをインスタンス生成するだけ!
ただ、ViewHolderがAbstractなので、生成時の{}が気になる。。。
static classとか別に持つことできれいに書けるがちょっとね。。。w
Adapterの生成箇所
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); Adapter adapter = new Adapter(); binding.recycleView.setLayoutManager(new LinearLayoutManager(this)); binding.recycleView.setAdapter(adapter); // 追加ボタン押下 binding.add.setOnClickListener((v -> { // Model作成、わかりやすいようにPosition設定 Model model = new Model(); model.setTitle( String.format( Locale.getDefault(), "タイトル = %d", adapter.getItemCount() + 1) ); model.setDescription( String.format( Locale.getDefault(), "詳細 = %d", adapter.getItemCount() + 1) ); // Adapterに追加 adapter.getModels().add(model); adapter.notifyDataSetChanged(); })); } }
殆ど書いてないですねw
ボタン押した後の処理が一番多いw
では今回は簡単に、こんな感じで!
DataBindingを利用して、シンプルにRecycleViewのAdapterクラスを実装してみました。
Github
github.com
あげてますー