我想实现以下场景:
所以,这是一个有两个部分的屏幕:
现在我希望此屏幕的行为方式如下:
在任何地方垂直滚动会使整个A部分一直向上,直到字幕向上(粘性);发生这种情况时,B部分的滚动也会上升。固定字幕后,如果继续滚动,B将继续显示更多元素。
向另一个方向滚动将首先显示整个A部分,当展开时,将触发两个部分的滑动刷新。
现在我尝试使用NestedScrollView
,但这与我的recyclerview
混乱,因为RecyclerView
无法滚动,因此enterAlways
无法实际回收视图(从而累积项目并最终进入OOM )。
我还尝试将A节中的所有内容放到appbar中,然后使用coordinatorlayout来固定字幕并移动所有内容,但无论enterAlwaysCollapsed
| scroll
| import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueueManager;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQC;
public class MQResponseWriter {
public static void main(String[] args) {
try {
int openOptions = MQC.MQOO_INQUIRE | MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
MQEnvironment.hostname = "myserver_name";
MQEnvironment.port = 1417;
MQEnvironment.channel = "my_channel_name";
//MQEnvironment.properties.put(CMQC.USER_ID_PROPERTY, "admin");
//MQEnvironment.properties.put(CMQC.PASSWORD_PROPERTY, "passw0rd");
//MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
MQQueueManager queueManager;
queueManager = new MQQueueManager("queue_manger_name");
MQQueue destQueue = queueManager.accessQueue("queue_name", openOptions);
MQMessage hello_world = new MQMessage();
hello_world.writeUTF("Blah...blah...bleah...test message no.1...!");
MQPutMessageOptions pmo = new MQPutMessageOptions();
destQueue.put(hello_world, pmo);
destQueue.close();
queueManager.disconnect();
System.out.println("------------------------success...");
} catch (Exception e) {
System.out.println("Exception: " + e);
e.printStackTrace();
}
}
}
|等的哪种组合我使用,行为永远不是预期的:大多数时候,即使A部分不完全可见,也会在下拉时触发滑动。
这个屏幕可能看起来像是一个琐碎的任务,但在Android中结合滚动被证明是一场噩梦。
答案 0 :(得分:1)
你需要2个Recycleview,一个用于水平标题,第二个用于垂直标题。请检查link。它可能对你有所帮助。
答案 1 :(得分:1)
我写了一份提要刷新行为套件nestrefresh。您可以在标题中添加可滚动子元素,也可以将粘性标题添加为TabLayout。拉动所有子项可以刷新并具有“拉动刷新”效果。