繁体   English   中英

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

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

我将RecyclerView用于显示和排序级别。 因为ListView的速度很慢,所以我没有使用listView而是使用RecyclerView。
因此,我需要一些ListView方法,此方法具有SetScrollPositionSetOnItemSelect

我的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);

            }
        });

    }

}

活动代码:

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);

        }
    });

}

我该怎么做?
这对我来说很重要

setScrollX()RecyclerView.OnItemTouchListener呢?

公共无效setScrollX(整数值)

设置视图的水平滚动位置。

RecyclerView.OnItemTouchListener

OnItemTouchListener允许应用程序在将RetoucherView自身的滚动行为考虑为触摸事件之前,在RecyclerView的视图层次结构级别拦截正在进行的触摸事件。

我已经实现了类似的方法,并且使用RecyclerView滚动的唯一方法是手动计算位置并使用正在使用的LayoutManager滚动。

如果您发现它可以帮助您使用它,那么我在适配器中使用了这两种方法来实现:

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

}

应该有更好的方法来做到这一点,但这对我有用,希望对您有帮助,祝您好运...

暂无
暂无

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

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