我的listview有问题。我的listview有一个自定义适配器。它从服务器获取记录。我使用AsyncTask
来获取记录并显示在列表视图中。
但是,当我单击listview项目以显示详细信息并返回列表活动时,它会滚动到顶部并刷新列表视图。
这是我的代码:
protected void onPostExecute(String result) {
progressBar.setVisibility(View.GONE);
if (isSwiped) {
// reset
isSwiped = false;
}
if (result != null && tag == 1) {
adapter = new SharedBibleVersesAdapter(SharedBibleVersesActivity.this,
SharedBibleVersesActivity.this);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void onResume() {
super.onResume();
displayRecords();
}
public void displayRecords() {
if(ConnectionDetector.hasNetworkConnection(this)) {
DisplayAsyncTask displayTask = new DisplayAsyncTask();
displayTask.execute();
} else {
progressBar.setVisibility(View.GONE);
tvHeader.setVisibility(View.VISIBLE);
tvHeader.setText(
getResources().getString(R.string.no_internet_connection));
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvTitle.setText(getResources().getString(R.string.shared_bible_verses));
tvHeader = (MyTextView) findViewById(R.id.tvHeader);
lv = (ListView) findViewById(R.id.listView);
progressBar = (ProgressWheel) findViewById(R.id.progressBar);
displayRecords();
}
为什么它滚动到顶部的任何想法?我很乐意感谢任何帮助。感谢。
答案 0 :(得分:0)
它会滚动到顶部,因为您再次设置适配器...
使用:
if (adapter == null) {
adapter = new SharedBibleVersesAdapter(SharedBibleVersesActivity.this, SharedBibleVersesActivity.this, itemList, userAPIkey, userId);
lv.setAdapter(adapter);
} else {
adapter.notifyDataSetChanged();
}
答案 1 :(得分:0)
我在我的一个旧项目中使用了以下内容,在onSaveInstanceState
添加了此代码并且它有效:
// save index and top position
int index = listView.getFirstVisiblePosition();
View view = listView.getChildAt(0);
int top = (view == null) ? 0 : view.getTop();
然后将其保存在SharedPreferences
中,以便您可以返回相同的位置:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
Editor edit = sp.edit();
edit.putString(key1, index);
edit.putString(key2, top);
edit.commit();
您可以通过从ListView
检索数据来设置SharedPreferences
的先前状态,例如:
SharedPreferences sp =PreferenceManager.getDefaultSharedPreferences(getActivity());
String _index = sp.getString("INDEX1", saved_index);
String _top = sp.getString("TOP1", saved_top);
然后在setAdapter
:
listView.setSelectionFromTop(Integer.parseInt(_index), Integer.parseInt(_top));
注意: onSaveInstanceState()
是用于在暂停活动之前存储数据的方法。
答案 2 :(得分:0)
请在<ListView>
文件
AndroidManifest.xml
元素中添加属性
android:transcriptMode
值:
notifyDataSetChanged()
调用在底部添加新项目时,列表视图将滚动显示此项目您的情况,normal
是正确的值,它将解决您的问题
答案 3 :(得分:0)
保存您点击的索引并在以后使用
lv.setSelection(index);