RecyclervView/ClickListener/Retrofit2実装した。
前回に引き続きClick機能をつけたもの作りました。
コードはこちら
Interface class
public interface OnItemClickListener{ void onItemClick(View view, int position); }
RecyclerView Adapter class
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> { private List<Shop> resultData; private Context mContext; private int rowLayout; private OnItemClickListener mClickListener; public CustomAdapter(List<Shop> resultData, int rowLayout, Context context) { this.resultData = resultData; this.rowLayout = rowLayout; this.mContext = context; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(rowLayout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(final ViewHolder viewholder, final int position) { viewholder.item_text.setText(resultData.get(position).getName()); Picasso.with(mContext).load(resultData.get(position).getPhoto().getMobile().getS()) .into(viewholder.item_pic); } @Override public int getItemCount() { return resultData.size(); } public void setmClickListener(OnItemClickListener mClickListener) { this.mClickListener = mClickListener; } public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ private TextView item_text; private ImageView item_pic; public ViewHolder(View itemView) { super(itemView); item_text = (TextView)itemView.findViewById(R.id.item_text); item_pic = (ImageView)itemView.findViewById(R.id.item_pic); itemView.setOnClickListener(this); } @Override public void onClick(View v) { mClickListener.onItemClick(v, getAdapterPosition()); } } }
MainFragment class
@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); rManager = new InternetManager(); getGourmetData(); mRecyclerView = (RecyclerView)view.findViewById(R.id.recycleView); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.activity_main_fragment, container, false); } private void bindViews() { mRecyclerView.setHasFixedSize(true); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); mRecyclerView.setLayoutManager(layoutManager); adapter = new CustomAdapter(shops, R.layout.activity_custom_items, getActivity()); mRecyclerView.setAdapter(adapter); adapter.setmClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position) { DetailActivity detailFragment = new DetailActivity(); Shop shopInfo = shops.get(position); Bundle bundle = new Bundle(); bundle.putString("title", shopInfo.getName()); bundle.putString("address", shopInfo.getAddress()); bundle.putString("catches", shopInfo.getCatch()); bundle.putString("access", shopInfo.getAccess()); bundle.putString("open", shopInfo.getOpen()); bundle.putString("close", shopInfo.getClose()); bundle.putString("wifi", shopInfo.getWifi()); bundle.putString("private", shopInfo.getPrivateRoom()); bundle.putString("card", shopInfo.getCard()); bundle.putString("about", shopInfo.getOtherMemo()); bundle.putString("budget", shopInfo.getBudget().getAverage()); bundle.putString("photo", shopInfo.getPhoto().getMobile().getL()); bundle.putString("url", shopInfo.getUrls().getMobile()); detailFragment.setArguments(bundle); FragmentManager fragmentManager = getActivity().getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.activity_main, detailFragment); transaction.addToBackStack(null); transaction.commit(); } }); } private void getGourmetData(){ String shinsaibashiCode = "Y315"; String json = "json"; final Call<ShopData> requestData = rManager.getApiInterface().getShopData("APIキー", shinsaibashiCode, json); requestData.enqueue(new Callback<ShopData>() { @Override public void onResponse(Call<ShopData> call, Response<ShopData> response) { shopList = response.body().results.getShop(); shops = shopList; bindViews(); } @Override public void onFailure(Call<ShopData> call, Throwable t) { Log.e("Restaurants","Error" + t.getMessage()); Toast.makeText(getActivity().getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show(); } }); }
みたいな感じです。
ただRunするとRecyclerView: No adapter attached; skipping layoutと表示されるのでなぜかはわからない
とりあえず思った通りに形にすることができた。
サービスを何で作ったらいいのか迷ってる。Androidサーバーはみんな何使ってるの?
Web系も触りたいが、、早くエンジニアとして働いてサービス開発したい。
ついでにこのアプリのGitHubも載せておきます。
ではまた!!