
이게 제가 구현하고자 하는것이구요..

이게 제가 지금 테스트로 실험해보고있는 것입니다..최종적으로는 저는 이것을 다이얼로그에 띄워서 선택할것인데.. 문제는 처음 등, 어깨 선택했을때는 선택도 잘되고 바뀌는것도 잘되는데
등- 어꺠 -등으로 다시 선택하면 아이템이 나오질 않더군요..
사진을 보시면 처음 두개는 잘변환되는데 이후에는 안나오는게 제가 클릭하고 있는데도 안나오는것입니다
디버깅을 해보니 자꾸 들어가는 데이터 사이즈가 0이라고 뜨던데 원인을 모르겠습니다 ㅠㅠ
어디가 문제인가요?ㅜㅜ
MainActivity.java
public class MainActivity extends AppCompatActivity {
TextView back;
TextView sholuder;
TextView leg;
RecyclerView recyclerView;
ArrayList<String> items;
ArrayList<String> items2;
WorkoutAdapter adapter;
String[] workout_list;
String[] workout_list2;
boolean selection = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
back = findViewById(R.id.back);
sholuder = findViewById(R.id.shouler);
leg = findViewById(R.id.leg);
recyclerView = findViewById(R.id.recyclerview);
back.setTag("back");
sholuder.setTag("sholuder");
leg.setTag("leg");
LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext(), RecyclerView.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
adapter = new WorkoutAdapter();
items = new ArrayList<>(); // 등
items2 = new ArrayList<>(); // 어깨
workout_list = getResources().getStringArray(R.array.dialog_list);
workout_list2 = getResources().getStringArray(R.array.dialog_list2);
recyclerView.setAdapter(adapter);
for(int i=0; i<workout_list.length; i++) { // 등 데이터 삽임
items.add(workout_list[i]);
}
for(int i=0; i<workout_list2.length; i++) { // 어깨 데이터 삽임
items2.add(workout_list2[i]);
}
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!selection) {
adapter.removeItems();
adapter.addItems(items);
adapter.notifyDataSetChanged();
}
}
});
sholuder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!selection) {
adapter.removeItems();
adapter.addItems(items2);
adapter.notifyDataSetChanged();
}
}
});
}
}
Adapter.java
public class WorkoutAdapter extends RecyclerView.Adapter<WorkoutAdapter.ViewHolder> {
ArrayList<String> items = new ArrayList<>();
public void addItems(ArrayList<String> items ){
this.items = items;
}
public void removeItems() {
items.clear();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View itemView = inflater.inflate(R.layout.workout_item, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.setItem(items.get(position));
}
@Override
public int getItemCount() {
return items.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView workout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
workout = itemView.findViewById(R.id.workout);
}
public void setItem(String item) {
workout.setText(item);
}
}
}
*임의로 실험한다고 변수명같은것은 매우 대충 짰으니 양해좀 부탁드립니다..
일단 구성이 strings에 아이템에 뿌려줄 문자열 배열을 정의해놓은 상태입니다.
그걸 메인에서 ArrayList<String> 타입으로 넣어준 상태입니다.
그 다음에 이 넣은 ArrayList<String>을 어댑터에 넣어줍니다 (adpater.addItems(items))
removeItems가 어댑터 내에 정의 되어있는 실질적으로 보여주는 items를 clear()하는데
이것은 앞전에 클릭한 다른부위의 운동항목들을 지워줍니다.
이유는 클리어 해주지않고 계속 add할경우 이 items에 클릭할때마다 계속 데이터가 쌓여서 이전 다른 부위
의 운동항목까지 같이 보일까봐 해줬습니다.
clear() 해준후 다시 add해서 아이템을 보여주는데 처음 등-어깨로 가면 아이템이 잘바뀌는데,..
다시 등을 누르면 아이템이 없습니다..디버깅 해보니 다시 눌렀을때의
adapter.addItems(items);
부분에 이 items..그러니까 메인에 정의되어있는 문자열이 들어있는 ArrayList<String>이겠죠.
이것이 size가 0으로나오네요 즉 아무것도 들어있지 않습니다 ㅠ
왜 그런건가요?ㅜ
+) 추가적으로.. 이렇게 코드를 짰는데 어더한가요..? 제 생각에는 더 좋은 방법이 있을거같은데..
for문을 본문 코드에서는 테스트용으로 2개만 썼지만.. 실제로는 운동부위가 5~6개가 돼서
for문이 더 늘어나는데.. 그렇게되면 for문만 5개로 돌아가는 양은 적지만 코드 양으로보나
뭘로보나 지저분하기도하고 별로 같습니다..
탭이나 뷰페이저는 사용하고싶지는 않은데 다른 좋은 방법이 있을까요?