简体   繁体   English

如何在RecyclerView中使用一些ListView方法?

[英]How to use some of ListView method in RecyclerView?

I'm used RecyclerView for show and sort levels. 我将RecyclerView用于显示和排序级别。 because ListView has slowly speed I did not use listView and use RecyclerView. 因为ListView的速度很慢,所以我没有使用listView而是使用RecyclerView。
Therefore, I need some of the ListView methods, this methods has SetScrollPosition and SetOnItemSelect . 因此,我需要一些ListView方法,此方法具有SetScrollPositionSetOnItemSelect

My RecyclerView Adapter codes : 我的RecyclerView适配器代码:

public class levels_card_adapter extends
    RecyclerView.Adapter<levels_card_adapter.ViewHolder> {
private static String[] adapter_levels_number;

public levels_card_adapter(String[] adapter_levels_num_data) {
    adapter_levels_number = adapter_levels_num_data;



}

@Override
public levels_card_adapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                         int viewType) {

    View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
            R.layout.levels_recycler_layout, null);


    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {

    viewHolder.adapter_levels_text.setText(adapter_levels_number[position].toString());

    viewHolder.adapter_levels_version = adapter_levels_number[position];



}

@Override
public int getItemCount() {
    return adapter_levels_number.length;
}

public static class ViewHolder extends RecyclerView.ViewHolder {

    public TextView adapter_levels_text;

    public String adapter_levels_version;


    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);

        adapter_levels_text = (TextView) itemLayoutView
                .findViewById(R.id.level_thumnail_text);

        itemLayoutView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent question_page_intent = new Intent(v.getContext(), com.tellfa.braingame.activities.question_Page.class);
                v.getContext().startActivity(question_page_intent);

            }
        });

    }

}

Activity Code : 活动代码:

public class play_Page extends ActionBarActivity {

private RecyclerView play_recycler_levels;
private RecyclerView.Adapter play_adapter_levels;
private TextView play_header_text;
private tellfa_textView play_thumbnail_levels_num, play_time_level_num;
private DiscreteSeekBar play_scroll_seekbar;
private com.github.jorgecastilloprz.FABProgressCircle fb;
private Context context;
private ListView play_list_levels;

public static String[] levels_number = {"1", "2", "3", "4", "5", "6", "7", "8", "9",
        "10", "11", "12", "13", "14", "15", "16"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.play__page);

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    ///////////// Font Style
    Typeface yekan_font = Typeface.createFromAsset(getAssets(), "fonts/yekan.ttf");

    play_header_text = (TextView) findViewById(R.id.header_play_text);
    play_header_text.setTypeface(yekan_font);
    /////////////

    play_thumbnail_levels_num = (tellfa_textView) findViewById(R.id.level_thumnail_text);

    play_time_level_num = (tellfa_textView) findViewById(R.id.time_levels_num);

    ///////////// SeekBar
    play_scroll_seekbar = (DiscreteSeekBar) findViewById(R.id.scroll_seekbar_play);



    ///////////// Recycler View
    play_recycler_levels = (RecyclerView) findViewById(R.id.levels_recycler);

    play_recycler_levels.setHasFixedSize(true);

    play_recycler_levels.setLayoutManager(new LinearLayoutManager(this));

    play_adapter_levels = new levels_card_adapter(levels_number);

    play_recycler_levels.setAdapter(play_adapter_levels);

    ////////////

    /*
    //////////// List
    com.tellfa.braingame.adapters.levels_list_adapter adapter=new com.tellfa.braingame.adapters.levels_list_adapter
            (this, levels_number);
    play_list_levels=(ListView)findViewById(R.id.list);
    play_list_levels.setAdapter(adapter);
    play_list_levels.setScrollingCacheEnabled(true);
        ///////////
    */

    FrameLayout containerLayout = (FrameLayout) findViewById(R.id.rel_id);
    HeaderAnimator animator = new HeaderAnimator(this);

    StikkyHeaderBuilder.stickTo(play_recycler_levels)
            .setHeader(R.id.header, containerLayout)
            .minHeightHeader(250)
            .animator(animator)
            .build();

    ///////////// Refresh
    final SwipeRefreshLayout play_refresh = (SwipeRefreshLayout) findViewById(R.id.refresh_play_layout);
    play_refresh.setColorSchemeResources(R.color.refresh1, R.color.refresh2, R.color.refresh3, R.color.refresh4, R.color.refresh5);
    play_refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            play_refresh.setRefreshing(true);

        }
    });

}

How can I make this method? 我该怎么做?
this is very important for me 这对我来说很重要

What about setScrollX() and RecyclerView.OnItemTouchListener ? setScrollX()RecyclerView.OnItemTouchListener呢?

public void setScrollX (int value) 公共无效setScrollX(整数值)

Set the horizontal scrolled position of your view. 设置视图的水平滚动位置。

RecyclerView.OnItemTouchListener RecyclerView.OnItemTouchListener

An OnItemTouchListener allows the application to intercept touch events in progress at the view hierarchy level of the RecyclerView before those touch events are considered for RecyclerView's own scrolling behavior. OnItemTouchListener允许应用程序在将RetoucherView自身的滚动行为考虑为触摸事件之前,在RecyclerView的视图层次结构级别拦截正在进行的触摸事件。

I have implemented something like that and the only way of scrolling with the RecyclerView is calculating the position manually and scrolling with the LayoutManager that you are using. 我已经实现了类似的方法,并且使用RecyclerView滚动的唯一方法是手动计算位置并使用正在使用的LayoutManager滚动。

I used these 2 methods in my adapter to achieve this, if you find out that it helps you out use it: 如果您发现它可以帮助您使用它,那么我在适配器中使用了这两种方法来实现:

public void scrollToPosition(int positionToScrollTo) {
    LinearLayoutManager layoutManager = null;
    try {
        layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
    } catch (ClassCastException e) {
        log.d("You should pass a recyclerview with a layoutmanayer" +
                "that inherits from LinearLayoutManager");
        return;
    }
    int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
    View firstVisibleItemView = layoutManager.findViewByPosition(firstVisibleItemPosition);
    int firstViewHeight = firstVisibleItemView.getHeight();
    int scrollOffsetVertical = firstViewHeight * positionToScrollTo;
    mRecyclerView.scrollBy(0, scrollOffsetVertical);
}

public void smoothScrollToPosition(int positionToSCroll) {
    for (int i = 0;i < positionToSCroll; i++) {
        scrollToPosition(i);
    }

}

There should be better ways to do this but this worked for me, hope it helps, Good luck... 应该有更好的方法来做到这一点,但这对我有用,希望对您有帮助,祝您好运...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM