前回に引き続き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も載せておきます。
github.com
ではまた!!