如何按位置android

时间:2017-09-30 06:48:14

标签: android android-recyclerview highlighting smooth-scrolling

我正在开发一个应用程序,我需要一个微调器,如果用户从微调器中选择一些值,那么我需要平滑滚动该特定位置并突出显示该位置的项目。我已经做了一些事情,我有一个方法,如果视图不可见,如果视图不可见,它将突出显示该位置,它将不会突出显示。所以,我正面临着一些像这样的问题。

这是我从微调器获得位置的地方

versesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        final int possition = (int) versesSpinner.getSelectedItemId();
        recyclerView.smoothScrollToPosition(possition);
        setBackgroundColor(possition);
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});

这是我突出显示项目的方法

public void setBackgroundColor(int position) {
    for (int i = 0; i < versesList.size(); i++) {
        View view = mLayoutManager.findViewByPosition(i);
        try {
            if (view != null) {
                if (i == position)
                    view.setBackgroundColor(Color.parseColor("#504cbee7"));
                else
                    view.setBackgroundColor(Color.WHITE);
            }
        } catch (Exception e) {}
    }
}

这里的问题是在平滑滚动方法到达该特定项目之前调用setBackground()方法。

仅当视图可见且视图不为空时才会突出显示。

请告诉我是否有其他方法可以实现此目的请告诉我如何找到平滑滚动到位置是否已达到特定项目

我希望它有意义。

2 个答案:

答案 0 :(得分:0)

您尝试在完成滚动之前更改项目的背景。使用handler一段时间后安排该任务。

recyclerView.postDelayed(new Runnable(){
    public void run(){
        setBackgroundColor(possition);
    }
},1000);

答案 1 :(得分:0)

您可以考虑在my answer here设置一台织机,以检查如何根据需要突出显示RecyclerView中的项目。现在,如果您希望平滑滚动到突出显示的位置,请在调用smoothScrollToPosition(position)函数后立即添加notifyDataSetChanged()

所以highLightTheListItems()函数看起来像这样,我在那里引用我的答案。

public void highLightTheListItems() {
    // Modify your list items. 

    // Call notifyDataSetChanged in your adapter
    yourAdapter.notifyDataSetChanged();

    // Now smooth scroll to the position you want.
}

希望有所帮助。