【发布时间】:2021-05-16 14:41:25
【问题描述】:
我正在设计一个 Instagram 故事类型模板。我陷入了一个非常奇怪的问题。我在主要活动中使用了回收站视图。
MainActivity:(这只是显示的布局。我已将方向更改为水平)。
我的布局:
然后我设计了一个自定义适配器,并在布局中使用了线性布局。当点击每个视图时,它会打开一个显示整个故事内容的新 Activity。
就像在 Instagram 中,当用户打开任何故事时,用户可以点击屏幕右侧进入下一个故事,或点击屏幕左侧进入上一个故事。我试图实现同样的功能。开启剧情成功实施。当我在屏幕上添加右击和左击的功能时,问题就来了。我添加了两个按钮;一个在右边,一个在左边。问题是,如果当前有 3 个视图可见,那么我只能在这些故事之间导航,而不能导航到由于回收站视图而在屏幕上不可见的故事。
下面的代码是左右点击的代码
leftArrow = findViewById(R.id.leftArrow);
leftArrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(myAdapter.currentPosition - 1 >= 0) {
int firstVis = MainActivity.linearLayoutManager.findFirstVisibleItemPosition();
MainActivity.linearLayoutManager.scrollToPosition(firstVis - 1);
rightOrLeftClicks(myAdapter.currentPosition - 1);
}
}
});
rightArrow = findViewById(R.id.rightArrow);
rightArrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(myAdapter.currentPosition + 1 < myAdapter.localDataSet.length) {
int lastVis = MainActivity.linearLayoutManager.findLastVisibleItemPosition();
MainActivity.linearLayoutManager.scrollToPosition(lastVis + 1);
rightOrLeftClicks(myAdapter.currentPosition + 1);
}
}
});
}
下面的代码是函数rightOrLeftClicks
public void rightOrLeftClicks(int position) {
finish();
Log.d("rl", "working");
nextView = MainActivity.linearLayoutManager.getChildAt(position);
Log.d("ll", "The last element is " + MainActivity.linearLayoutManager.findLastVisibleItemPosition());
if(nextView != null)myAdapter.onClickView(position, myAdapter.localDataSet[position].symptom, nextView);
}
以下代码用于onClickView,与单击任何视图(故事)或单击左右按钮的代码相同。基本上我只是通过传递一个意图来打开另一个活动,其中包含我分别单击右侧或左侧时获得的下一个或上一个视图。
public static void onClickView(int position, String element, View v) {
Intent intent = new Intent(v.getContext(), MainActivity2.class);
idPosition = "";
idPosition = element;
ArrayList<String> passingContent = new ArrayList<>();
currentPosition = position;
passingContent.add(localDataSet[position].description);
passingContent.add(localDataSet[position].imageUrl);
intent.putExtra(element + "", passingContent);
v.getContext().startActivity(intent);
}
问题是它只给我可见的视图。不是其余的观点。我尝试了自动滚动,以便下一个或上一个视图变得可见,但它似乎不起作用。孩子的最后一个可见位置保持不变,当我尝试在最后一个可见视图之后打开视图时,它会向我返回一个空视图。
假设有 5 个故事。然后我会在屏幕上看到只有 3 个故事,其余的可以通过滚动看到。当我点击任何故事时。我只能在 1,2 和 3 之间导航。当我尝试从故事 3 中单击以查看故事 4 时。当前故事被 finish() 函数杀死,null 在 nextView 变量中返回,因为其中故事 4 未加载,我返回到 MainActivity。
我必须导航到我的回收站视图中显示的所有故事。
【问题讨论】:
标签: java android android-recyclerview android-linearlayout linearlayoutmanager