Android具有脚本模式,允许在将新数据添加到适配器时自动将列表视图滚动到底部.
可以以某种方式反转,以便在列表顶部自动添加新项目("逆转录模式")
方法stackFromBottom似乎是正确的,但不会在输入更改时自动滚动.
有没有人有一些示例代码,其中列表不断添加总是插入顶部的东西?我在这里走在正确的轨道上吗?
更新
谢谢你的回答,这让我想得更多.其实.我想让新条目显示在顶部,但屏幕仍然显示用户正在查看的项目.用户应主动滚动到顶部以查看新项目.所以我觉得成绩单模式不是我想要的.
我有一个自定义适配器用于ListView设置并正常工作.在按钮上单击基础数据中的某些内容,因此需要notifyDataSetChanged来刷新ListView.精细.但我也希望ListView滚动到发生更改的行.为此,我在notifyDataSetChanged之后立即调用smoothScrollToPosition.那是行不通的.
如果我不调用notifyDataSetChanged然后滚动工作,所以通知阻止滚动.我可能正在与将来处理的事件进行斗争.任何人都可以给我一个关于出错的指针吗?
我已经尝试了一段时间来使smoothScrollToPositionFromTop()工作,但它并不总是滚动到正确的位置.
我在一个布局中有一个ListView(有10个项目),旁边有10个按钮,所以我可以滚动到列表中的每个项目.通常当我向后或向前滚动一个位置时它工作正常,但是当我尝试向后或向前滚动超过3个位置时,ListView并不完全在所选位置结束.当它失败时,通常会关闭0.5到1.5个项目,当滚动失败时它不能真正预测.
在notifyDataSetChanged无法在android中工作之后我也检查了smoothScrollToPosition,但是这个修复程序对我不起作用而且我不更改任何数据.
我真的想自动滚动到选定的列表项目,但不是我无法弄清楚如何.有没有人之前有这个问题,知道如何解决它?
我有一个recyclerView,每个项目都是一个recyclerView。我想在特定条件下滚动到内部recyclerView的自定义位置。我在innerRecyclerView上使用了这段代码,但是没有用:
innerRecyclerView.smoothScrollToPosition(position);
Run Code Online (Sandbox Code Playgroud)
和这个:
innerRecyclerView.scrollToPosition(position);
Run Code Online (Sandbox Code Playgroud)
还有这个:
layoutManager.scrollToPositionWithOffset(position, offset);
Run Code Online (Sandbox Code Playgroud)
现在我有两个问题:
1)是否可以滚动到内部recyclerView的自定义位置?
2)如果可能的话,怎么办?
这是初始化主recyclerView:
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false);
adapter = new FreightsListRVAdapter(new FreightListCallBack(), new FreightListVHFactory());
rvFreightsList.setLayoutManager(layoutManager);
rvFreightsList.setItemViewCacheSize(30);
rvFreightsList.setNestedScrollingEnabled(true);
rvFreightsList.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
这是初始化innerRecyclerview:
LinearLayoutManager layoutManager = new LinearLayoutManager(itemView.getContext(), RecyclerView.VERTICAL, false);
layoutManager.setItemPrefetchEnabled(true);
layoutManager.setInitialPrefetchItemCount(7);
rvFreights.setNestedScrollingEnabled(false);
rvFreights.setLayoutManager(layoutManager);
rvFreights.setItemViewCacheSize(20);
adapter = new FreightsRVAdapter(new FreightCallBack(), new FreightSingleVHFactory());
rvFreights.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
这是我的主要recyclerView适配器:
public class FreightsListRVAdapter extends ListAdapter<FreightListModel, FreightListVH> {
private final FreightListVHFactory mFactory;
private final PublishSubject<FreightListVHAction> mClickUserPS = PublishSubject.create();
@Inject
public FreightsListRVAdapter(@NonNull FreightListCallBack diffCallback, FreightListVHFactory factory) {
super(diffCallback);
mFactory = factory; …Run Code Online (Sandbox Code Playgroud) 如何使用recyclelerview内的偏移滚动到特定位置?
我用过
public LinearLayoutManager linearlayoutmanager;
linearlayoutmanager.scrollToPositionWithOffset(0, scrolled);
Run Code Online (Sandbox Code Playgroud)
我也用过scrollto
mRecyclerView.scrollTo(0, scrolled);
Run Code Online (Sandbox Code Playgroud)
我也使用了smoothScrolltoposition
mRecyclerView.smoothScrollToPosition(scrolled);
Run Code Online (Sandbox Code Playgroud)
但似乎没有人为我工作.
如果有人对此有所了解,请帮助我
UPDATE
功能我在哪里设置我的Recyclerview的适配器
public void Nearby_Search_requestData() {
OkHttpClient client = new OkHttpClient();
client = MySSLTrust.trustcert(getActivity());
RestAdapter adapter = new RestAdapter.Builder().setEndpoint(SEARCH_MERCHANT_ENDPOINT).setClient(new OkClient(client)).build();
final RetrofitInterface api = adapter.create(RetrofitInterface.class);
if (api != null) {
api.post_Nearby_Search(page.toString(), new Callback<Nearby_Search_All>() {
@Override
public void success(final Nearby_Search_All server_data, Response response) {
if (server_data.getSuccess() == 1) {
if (server_data.getResults().size() == 0) {
if (page != 0) {
mRecyclerView.scrollToPosition(firstVis);
} else {
Log.d("hii", "zero");
// NO_MERCHANT.setVisibility(View.VISIBLE); …Run Code Online (Sandbox Code Playgroud) 我想在Android中创建一个ListView.当我点击某个项目时,我希望它将其滚动到顶部.我怎样才能做到这一点?这是我正在尝试的Activity类,项目选择工作正常,但它不会滚动到顶部
public class MyListActivity extends ListActivity {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
String item = (String) getListAdapter().getItem(position);
//l.setSelection(2);
Toast.makeText(this, position + " selected", Toast.LENGTH_LONG).show();
//l.smoothScrollToPosition(5);
}
}
Run Code Online (Sandbox Code Playgroud)