Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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
Android 单击可循环查看突出显示的项目_Android_Listview_Android Recyclerview - Fatal编程技术网

Android 单击可循环查看突出显示的项目

Android 单击可循环查看突出显示的项目,android,listview,android-recyclerview,Android,Listview,Android Recyclerview,我动态创建了以下RecyclerView。我想在单击时突出显示已单击的项目。单击后,转到下一个活动。我给出了以下背景XML: hRecyclerView.setBackgroundResource(R.drawable.mylistview_background); 这不是设定它的方式吗?我在这里该怎么办 hRecyclerView = (RecyclerView) findViewById(R.id.my_history_view); // use a l

我动态创建了以下
RecyclerView
。我想在单击时突出显示已单击的项目。单击后,转到下一个
活动
。我给出了以下背景XML:

hRecyclerView.setBackgroundResource(R.drawable.mylistview_background); 
这不是设定它的方式吗?我在这里该怎么办

        hRecyclerView = (RecyclerView) findViewById(R.id.my_history_view);

        // use a linear layout manager
        hLayoutManager = new LinearLayoutManager(this);
        hRecyclerView.setLayoutManager(hLayoutManager);
        hRecyclerView.setVerticalScrollBarEnabled(false);
        hRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
        hRecyclerView.setBackgroundResource(R.drawable.mylistview_background);
   hAdapter = new HistoryAdapter(history, this);
        hRecyclerView.setAdapter(hAdapter);


        hRecyclerView.addOnItemTouchListener(
                new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        // do whatever
                        if(position>0) {
                            History his = history.get(position - 1);
                            Intent intent = new Intent(getApplicationContext(), TrackActivity.class);
                            intent.putExtra("from", his.src_station);
                            intent.putExtra("to", his.dest_station);
                            intent.putExtra("train_no", his.train_no);
                            intent.putExtra("train_name", his.train_name);
                            startActivity(intent);
                            overridePendingTransition(R.anim.right_in, R.anim.left_out);

                        }
                    }
                })
        );

        hRecyclerView.setItemAnimator(new DefaultItemAnimator());
mylistview_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <gradient android:endColor="#22000000" android:startColor="#a7a2288f" android:angle="270" />
        </shape>
    </item>

    <item android:state_focused="true">
        <shape>
            <gradient android:endColor="#2200ff00" android:startColor="#a2008f00" android:angle="270" />
        </shape>
    </item>


</selector>


非常感谢您的帮助

您正在设置整个RecyclerView的背景(它不会被“选中”)。您需要设置行视图的背景。在HistoryAdapter中的onCreateViewHolder中,您将膨胀行视图。这就是需要具有可绘制选择器的背景(您可以在xml或代码中进行设置)

首先删除这一行,它是针对整个recyclerview的

您的自定义行/项布局应如下所示(将mylistview_background.xml放入可绘制文件夹):

。。。

在ViewHolder类中不使用onClickListener来处理单击事件有什么原因吗?我昨天花了很多时间为这种情况想出最好的解决方案,对我来说,这样做更容易。如果有什么我不知道的,请告诉我。
hRecyclerView.setBackgroundResource(R.drawable.mylistview_background); 
<RelativeLayout ...
     android:background="@drawable/mylistview_background">...
</RelativeLayout>