RecyclerView 질문
조회수 848회
하나의 RecyclerView에 2개의 DB에서 가져오는 데이터를 동시에 보여주고싶습니다.
이렇게 2개의 테이블이 있는데 야구팀과 농구팀에 들어간 선수들의 이름은 동명이인으로 같습니다. 안드로이드에서 선수 이름을 검색했을 때 야구팀은 이름과 타율을 보여주고싶고 농구팀은 이름과 포지션을 보여주고싶습니다.
이런식의 결과를 원했는데 안 나오네요. ViewType을 지정해주면 된다는건 알아냈는데 이렇게 지정을 하는게 맞는지는 잘 모르겠네요.
밑에는 MainActivity입니다.
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
SearchView searchView;
ApiInterface apiInterface;
Adapter adapter;
List<BaseBallInfo> baseBallInfoList;
List<BasketBallInfo> basketBallInfoList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerview);
searchView = findViewById(R.id.searchView);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
search(s);
return false;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
});
}
private void search(String name) {
apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
Call<List<BaseBallInfo>> call = apiInterface.getBaseBallInfo(name);
call.enqueue(new Callback<List<BaseBallInfo>>() {
@Override
public void onResponse(Call<List<BaseBallInfo>> call, Response<List<BaseBallInfo>> response) {
baseBallInfoList = response.body();
adapter = new Adapter(MainActivity.this, baseBallInfoList);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<List<BaseBallInfo>> call, Throwable t) {
Log.e("MainActivity", t.toString());
}
});
Call<List<BasketBallInfo>> call2 = apiInterface.getBasketBallInfo(name);
call2.enqueue(new Callback<List<BasketBallInfo>>() {
@Override
public void onResponse(Call<List<BasketBallInfo>> call, Response<List<BasketBallInfo>> response) {
basketBallInfoList = response.body();
adapter = new Adapter(MainActivity.this, basketBallInfoList);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<List<BasketBallInfo>> call, Throwable t) {
Log.e("MainActivity", t.toString());
}
});
}
}
밑에는 RecyclerView의 Adapter입니다.
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List list;
public Adapter(Context context, List list) {
this.context = context;
this.list = list;
}
@Override
public int getItemViewType(int position) {
if(list.get(position) instanceof BaseBallInfo) {
return 0;
}
return 1;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(this.getItemViewType(viewType) == 0) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_baseball, parent, false);
BaseBallViewHolder holder = new BaseBallViewHolder(view);
return holder;
} else {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_basketball, parent, false);
BasketBallViewHolder holder = new BasketBallViewHolder(view);
return holder;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
if(this.getItemViewType(position) == 0) {
BaseBallInfo baseBallInfo = (BaseBallInfo)list.get(position);
BaseBallViewHolder holder = (BaseBallViewHolder) viewHolder;
holder.nameTextView.setText(baseBallInfo.getName());
holder.battingTextView.setText(baseBallInfo.getBatting_avg());
} else {
BasketBallInfo basketBallInfo = (BasketBallInfo)list.get(position);
BasketBallViewHolder holder = (BasketBallViewHolder) viewHolder;
holder.name2TextView.setText(basketBallInfo.getName());
holder.positionTextView.setText(basketBallInfo.getPos());
}
}
@Override
public int getItemCount() {
return list.size();
}
public static class BaseBallViewHolder extends RecyclerView.ViewHolder {
TextView nameTextView, battingTextView;
public BaseBallViewHolder(@NonNull View itemView) {
super(itemView);
nameTextView = itemView.findViewById(R.id.nameTextView);
battingTextView = itemView.findViewById(R.id.battingTextView);
}
}
public static class BasketBallViewHolder extends RecyclerView.ViewHolder {
TextView name2TextView, positionTextView;
public BasketBallViewHolder(@NonNull View itemView) {
super(itemView);
name2TextView = itemView.findViewById(R.id.name2TextView);
positionTextView = itemView.findViewById(R.id.positionTextView);
}
}
}
중간 언어로 php를 사용하는 중인데 php 결과는 잘 나옵니다. 도와주세요.
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력