我有一个[Route("api/Hello")]
public class HelloController : Controller {
StudentContext db = new StudentContext();
[HttpGet] // Matches GET api/Hello
[HttpGet("Ghouse")] // Matches GET api/Hello/Ghouse
public string Ghouse() {
var x = from n in db.StudentMaster
select n;
return "Hello Ghouse";
}
}
,点击其商品会转到新的RecyclerView
。有一个Activity
有多个项目。在按下时,我正在保存当前项目位置。我想要做的是当用户站在ViewPager
的任何项目上后退时,该项目应在ViewPager
中突出显示。
问题
当项目的位置可见时,没有问题。我使用以下
更改背景RecyclerView
但如果项目不可见,则没有任何反应,我无法更改背景。
我做了什么
view = layoutManager.findViewByPosition(Utils.ayat);
if(view != null) {
LinearLayout parent = (LinearLayout) view.findViewById(R.id.parent);
parent.setBackgroundColor(Color.GRAY);
}
滚动正确但RecyclerView
返回null。findViewByPosition
时,滚动的位置将是它的最后一个可见项目。我试着这样做,但没有运气。RecyclerView
然后尝试获得位置。这也行不通。 注意:我无法执行此操作Thread.sleep(100)
,因为要突出显示的项目未预先定义。
答案 0 :(得分:1)
在返回列表时,不应强制更改背景颜色,而应存储突出显示的项目列表(索引),并在DataTable AllData;
private void Form1_Load(object sender, EventArgs e) {
AllData = GetDT();
dataGridView1.DataSource = AllData;
comboBox1.DataSource = AllData;
comboBox2.DataSource = AllData;
comboBox1.ValueMember = "sehir";
comboBox2.ValueMember = "ilceler";
}
中检查项目是否突出显示,并相应地更新其背景(请记住当项目未突出显示时也清除背景。
这通常是您应该始终如何使用onBindViewHolder(...)
。
答案 1 :(得分:0)
你试过notifyItemChanged(int position)
吗?您可以通过方法将突出显示的项目位置发送到适配器并调用notifyItemChanged(int position)
。例如,
int highlightPosition = -1;
public updateHighlightPosition(int position){
highlightPosition = position;
notifyItemChanged(position)
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if(position == highlightPosition ){
// You can change the background here
}else{
// Set default background
}
}
答案 2 :(得分:0)
尝试通过调用notifyItemChanged(position)的方法来使用RecyclerView.AdapterDataObserver类;
每当您使用某个位置调用notifyItemChanged()方法时,它都会调用AdapterDataObserver类。所以,首先你需要将我在下面给出的代码粘贴到你的适配器类中。检查我的例子,你会得到一些想法来实现你的要求。
RecyclerView.AdapterDataObserver adapterDataObserver = new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
super.onItemRangeChanged(positionStart, itemCount);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
manager.scrollToPositionWithOffset(positionStart, 0);
RecyclerView.ViewHolder rebindViewHolder = recyclerView.findViewHolderForLayoutPosition(positionStart);
if (rebindViewHolder != null) {
onBindViewHolder((ViewHolder) rebindViewHolder, positionStart);
}
}
}, 1000);
}
};
在此之后,在onBindViewHolder方法中使用position更改背景。 我认为这会对你有所帮助。