Java 使用setOnClickListener将项目绑定到位置
在myJava 使用setOnClickListener将项目绑定到位置,java,android,android-recyclerview,position,Java,Android,Android Recyclerview,Position,在myRecyclerView中,当使用setOnClickListener单击有几个项时,Fragmet打开,但有一个问题,项的位置未连接到setOnClickListener位置是否存在,如果我进行了排序并且项的位置发生了更改,则设置ClickListener的位置不会更改,并且第一个项上的度数将始终打开相同的帧。如何链接它们?正如我在属性所在的文件中所理解的,我需要在setOnClickListener中为其分配一些变量,但这只是一个猜测 帮助编写代码,或者至少是一个它应该是什么样子的示例
RecyclerView
中,当使用setOnClickListener
单击有几个项时,Fragmet
打开,但有一个问题,项的位置
未连接到setOnClickListener位置
是否存在,如果我进行了排序并且项的位置
发生了更改,则设置ClickListener
的位置
不会更改,并且第一个项
上的度数将始终打开相同的帧
。如何链接它们?正如我在属性所在的文件中所理解的,我需要在setOnClickListener
中为其分配一些变量,但这只是一个猜测
帮助编写代码,或者至少是一个它应该是什么样子的示例。因为我一点也不懂
现在,我在适配器和开关中的位置发生了变化。如何将它绑定到exampleList=newArrayList()中的元素
回收视图
所在的片段
public class FragmentAttractionRecyclerView extends Fragment {
private RecyclerView mRec;
private AttractionsAdapter adapter;
private ArrayList<AttractionsItem> exampleList;
private RecyclerView.LayoutManager mLayoutManager;
private String[]mArraysNames= new String[]{"Baby островок","Виражи","Вокруг света","5D кинотеатр"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_attraction_test_2, container, false);
}
@SuppressLint("InflateParams")
@Override
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
createExampleList();
buildRecyclerView();
ImageView sort_alphabet = requireView().findViewById(R.id.sort_alphabet);
sort_alphabet.setOnClickListener(v -> {
sortArray();
sortArrayList();
});
}
private void sortArray(){
Arrays.sort(mArraysNames);
adapter.notifyDataSetChanged();
}
private void sortArrayList(){
Collections.sort(exampleList, (o100, o200) -> o100.get_attraction_cost().compareTo(o200.get_attraction_cost()));
adapter.notifyDataSetChanged();
}
public void createExampleList() {
exampleList = new ArrayList<>();
exampleList.add(new AttractionsItem(R.mipmap.unnamed, R.drawable.ic_kid, "Baby островок", "Детский", "60₽"));
exampleList.add(new AttractionsItem(R.mipmap.unnamed, R.drawable.ic_kid, "Виражи", "Детский", "80₽"));
exampleList.add(new AttractionsItem(R.mipmap.unnamed, R.drawable.ic_kid, "Вокруг света", "Детский", "50₽"));
exampleList.add(new AttractionsItem(R.mipmap.unnamed, R.drawable.ic_interactive, "5D кинотеатр", "Интерактивный", "120₽"));
}
public void buildRecyclerView() {
mRec = requireView().findViewById(R.id.attraction_recycler);
adapter = new AttractionsAdapter(exampleList);
mLayoutManager = new LinearLayoutManager(getContext());
mRec.setLayoutManager(mLayoutManager);
mRec.setAdapter(adapter);
}
}
项目
public class AttractionsItem
{
private int mImg_1,mImg_2;
private final String mText_attraction_name;
private final String mText_attraction_type;
private final String mText_attraction_cost;
public AttractionsItem(int img1,int img2, String text_attraction_name, String text_attraction_type, String text_attraction_cost)
{
mImg_1 = img1;
mImg_2 = img2;
mText_attraction_name = text_attraction_name;
mText_attraction_type = text_attraction_type;
mText_attraction_cost = text_attraction_cost;
}
public int getImg1()
{
return mImg_1;
}
public int getImg2()
{
return mImg_2;
}
public String get_attraction_name()
{
return mText_attraction_name;
}
public String get_attraction_type()
{
return mText_attraction_type;
}
public String get_attraction_cost()
{
return mText_attraction_cost;
}
}
要获取recyclerView项的正确位置,请不要在onBindViewHolder内的onClickListener中使用position
,而是使用holder.getAdapterPosition()代码>或holder.getBindingAdapterPosition()代码>
所以不是
holder.Card.setOnClickListener(v -> {
switch (position) {
case 1:
...
break;
case 2:
...
break;
}
case 3:
...
break;
}
}
});
使用
要获取recyclerView项的正确位置,请不要在onBindViewHolder内的onClickListener中使用position
,而是使用holder.getAdapterPosition()代码>或holder.getBindingAdapterPosition()代码>
所以不是
holder.Card.setOnClickListener(v -> {
switch (position) {
case 1:
...
break;
case 2:
...
break;
}
case 3:
...
break;
}
}
});
使用
holder.Card.setOnClickListener(v -> {
switch (position) {
case 1:
...
break;
case 2:
...
break;
}
case 3:
...
break;
}
}
});
holder.Card.setOnClickListener(v -> {
switch (holder.getAdapterPosition()) {
case 1:
...
break;
case 2:
...
break;
}
case 3:
...
break;
}
}
});