Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用setOnClickListener将项目绑定到位置_Java_Android_Android Recyclerview_Position - Fatal编程技术网

Java 使用setOnClickListener将项目绑定到位置

Java 使用setOnClickListener将项目绑定到位置,java,android,android-recyclerview,position,Java,Android,Android Recyclerview,Position,在myRecyclerView中,当使用setOnClickListener单击有几个项时,Fragmet打开,但有一个问题,项的位置未连接到setOnClickListener位置是否存在,如果我进行了排序并且项的位置发生了更改,则设置ClickListener的位置不会更改,并且第一个项上的度数将始终打开相同的帧。如何链接它们?正如我在属性所在的文件中所理解的,我需要在setOnClickListener中为其分配一些变量,但这只是一个猜测 帮助编写代码,或者至少是一个它应该是什么样子的示例

在my
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;
        }
    }
});