gpt4 book ai didi

android - 来自 ListFragment 的 startActivityForResult 似乎没有调用 onActivityResult

转载 作者:行者123 更新时间:2023-11-29 22:23:24 25 4
gpt4 key购买 nike

我确实在这里尝试了“固定” jar :

http://code.google.com/p/android/issues/detail?id=15394

并且还完全重新安装了 SDK,但两种方法都无法解决我在这里遇到的问题。那么 startActivityForResult 是否就是 ListFragment 的禁忌?

原帖:

我有一个 ClientListView,它是一个 ListFragment,当单击操作栏上的按钮时,它会获取在 ListFragment 中选择的内容> 查看并启动新 Activity 以编辑所选客户端(或者如果单击其他选项,则一起单击新客户端)。

一切正常。 ClientListView fragment 和 ClientDetailsFragment 替换为我的 EditClientActivity FragmentActivity(调用 ClientEdit fragment )。这会占据整个屏幕并在操作栏中创建一个保存/取消按钮。

问题是当点击保存时,我无法用新创建的客户端或编辑过的客户端更新我的ListFragment。为了完整起见,这是我的调用顺序:

MainActivity FragmentActivity 设置 ClientListView ListFragmentClientDetailsActivity FragmentActivity(具有 ClientDetails fragment )。然后 ClientListView ListFragment 在其新的或编辑客户端选项被选中时可以在 EditClientActivity 上启动 ActivityForResult(其中包含 ClientEdit fragment )。

ClientEdit fragment 设置了保存取消的选项菜单,一旦选择了 ClientEdit fragment 中的保存,就会发生几件事:

新客户或编辑过的客户被保存到数据库中。mEditListener.onEditComplete() 被调用。由于调用 FragmentActivity EditClientActivity 实现了一个 onEditCompleteListener,我在 ClientEdit 中使用了 onAttach fragment 。

然后我的 EditClientActivityonEditComplete(long id) 方法:

public void onEditComplete(long id) {
Intent in = new Intent();
this.setResult(1, in); //just something to let the ClientListView that the client i saved refresh the list.
Toast.makeText(this.getBaseContext(), "Client Saved", Toast.LENGTH_LONG).show();
finish(); //go back to our listview and client details view
}

在我的 ClientListView(“ListFragment”类型)中,我有这个:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
this.setHasOptionsMenu(true);
//which columns to put as the cursor
String[] columns = new String[] { "firstname", "lastname" };
//how to post those columns into the layout. check client_row.xml for these ids
int[] to = new int[] { R.id.client_first_name_list_label, R.id.client_last_name_list_label};

myCursor = getClientsCursor(); //this is NOT closing the database connection if it does it gets an error

theClients = new SimpleCursorAdapter(this.getListView().getContext(),
R.layout.client_row, myCursor, columns, to);
setListAdapter(theClients);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.new_client:
// TODO: add recipe
showClientEdit(-1);
return true;
case R.id.client_delete:
// TODO: delete recipe
Toast.makeText(getActivity(), "Delete Client selected", Toast.LENGTH_LONG).show();
return true;
case R.id.client_edit:
if(mCurrentSelectedItemIndex!=-1)
showClientEdit(mCurrentSelectedItemIndex);
else
Toast.makeText(getActivity(), "Select client to edit!", Toast.LENGTH_LONG).show();
return true;
case android.R.id.home:
// TODO: Handle app icon click
Toast.makeText(getActivity(), "Home icon selected", Toast.LENGTH_LONG).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}


void showClientEdit(long someId)
{
..do stuff to get the right client to pass to the intent
Intent intent = new Intent(getActivity(), EditClientActivity.class);
// Send the recipe index to the new activity
intent.putExtra(EditClientActivity.SELECTED_CLIENT, clientId);
startActivityForResult(intent, Activity.RESULT_OK);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
//never gets here :(
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(this.getListView().getContext(), "Result code: " +resultCode , Toast.LENGTH_LONG).show();
if(resultCode ==1)
{
myCursor = getClientsCursor(); //not sure if i need this for the next line or not, want my list to update with newly
//added client or edited client names etc...
theClients.notifyDataSetChanged();
Toast.makeText(this.getListView().getContext(), "Data set notified!!!" , Toast.LENGTH_LONG).show();
}
}

问题是我的 startActivityForRestult 从 ListFragment 调用了 EditClientActivity 吗?据我所知,永远不会调用 onActivityResult。我提供所有这些信息是为了弄清楚并掌握 Fragment/FragmentActivities 等应该如何相互交互。我是通过浏览教程、开发人员指南等学到的东西来这样做的。我对自己的进步很满意,但现在遇到了困难……而且可能意识到我做事的方式并不正确。 ..我很想开悟。对我来说,Android 最难的部分是管理所有这些 Activity 和 View 如何相互交互....

最佳答案

您是否在使用 Fragment 的兼容性库?

兼容性包存在问题, fragment 中的 onActivityResult 已损坏。看这里http://code.google.com/p/android/issues/detail?id=15394 .您还可以在那里下载固定版本的 jar 文件。

关于android - 来自 ListFragment 的 startActivityForResult 似乎没有调用 onActivityResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589583/

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