gpt4 book ai didi

java - 编辑条目后 ListView 滚动到顶部

转载 作者:行者123 更新时间:2023-12-01 15:24:40 26 4
gpt4 key购买 nike

我正在尝试创建一个 ListView ,当您单击某个条目时,您可以对其进行修改,并且在点击确认后,它仍然会显示您刚刚修改的条目,而不是滚动到顶部。

进行了建议的更改,在离开编辑 Activity 后,它仍然滚动到顶部并且找不到正确的滚动位置。我错过了什么吗?

static int firstPosition = 0;

protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor c = mNotesCursor;
ListView mListView = getListView();
firstPosition = mListView.getFirstVisiblePosition();
c.moveToPosition(position);
Intent i = new Intent(this, QuoteEdit.class);
i.putExtra(QuotesDBAdapter.KEY_ROWID, id);
i.putExtra(QuotesDBAdapter.KEY_QUOTES, c.getString(
c.getColumnIndexOrThrow(QuotesDBAdapter.KEY_QUOTES)));
startActivityForResult(i, ACTIVITY_EDIT);
}
public void onResume(int requestCode, int resultCode, Intent intent) {
ListView mListView = getListView();

if (mListView != null && firstPosition >= 0){
mListView.scrollTo(0,firstPosition);
// mListView.setSelection(firstPosition);

}

}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
try {
super.onActivityResult(requestCode, resultCode, intent);
Bundle extras = intent.getExtras();
switch(requestCode) {
case ACTIVITY_CREATE:
String title = extras.getString(QuotesDBAdapter.KEY_QUOTES);
mDbHelper.createQuote(title);
break;
case ACTIVITY_EDIT:
ListView mListView = getListView();
Long rowId = extras.getLong(QuotesDBAdapter.KEY_ROWID);
if (rowId != null) {
String editTitle = extras.getString(QuotesDBAdapter.KEY_QUOTES);
mDbHelper.updateQuote(rowId, editTitle);
mListView.setSelection(firstPosition);
}
fillData();
break;
}
}
catch (Exception ex){
Context context = getApplicationContext();
CharSequence text = ex.toString();
int duration = Toast.LENGTH_LONG;

Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}

最佳答案

您的编辑器是另一个 Activity,您使用 startActivityForResult() 调用它。该行实际上并没有在这里停止 - 它将继续处理该方法的其余部分,包括 mListView.setSelection(firstPosition); 语句。换句话说,setSelection() 在用户编辑值之前被调用。

当编辑器Activity关闭时,它会将结果返回给onActivityResult()。在此方法中,您需要告诉它再次将 ListView 滚动到正确的位置。所以也许是这样的......

static int firstPosition = 0; // this is a global variable - set it in onListItemClick()

public void onActivityResult (int requestCode, int resultCode, Intent data){
mListView.setSelection(firstPosition);
}

并更改您的 onListItemClick() 方法以使用全局变量,如下所示...

protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor c = mNotesCursor;
ListView mListView = getListView();
firstPosition = mListView.getFirstVisiblePosition(); // changed this line
c.moveToPosition(position);
Intent i = new Intent(this, QuoteEdit.class);
i.putExtra(QuotesDBAdapter.KEY_ROWID, id);
i.putExtra(QuotesDBAdapter.KEY_QUOTES, c.getString(
c.getColumnIndexOrThrow(QuotesDBAdapter.KEY_QUOTES)));
startActivityForResult(i, ACTIVITY_EDIT);
mListView.setSelection(firstPosition);
}

现在,setSelection() 方法不会更改滚动位置,但您可以尝试这个...

onListItemClick()中,更改为以下内容...

    firstPosition = mListView.getScrollY();

并在onActivityResult()中,更改为以下内容...

    mlistView.scrollTo(0,firstPosition);

也可以将以下代码添加到您的 onResume() 方法的末尾(在您的主 Activity 中),以便当您返回到主要 Activity ...

ListView mListView = getElementById("myListView");
if (mlistView != null && firstPosition >= 0){
mlistView.scrollTo(0,firstPosition);
}

关于java - 编辑条目后 ListView 滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10342713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com