Android 来自列表片段的startActivityForResult不';I don’我好像没有打电话给ActivityResult

Android 来自列表片段的startActivityForResult不';I don’我好像没有打电话给ActivityResult,android,android-fragments,android-3.0-honeycomb,Android,Android Fragments,Android 3.0 Honeycomb,我在这里试过“固定”罐子: 并且完全重新安装了SDK,这两种方法都没有解决我在这里遇到的问题。那么,startActivityForResult仅仅是ListFragment的一个禁忌吗 原职: 我有一个ClientListView,它是一个ListFragment,当单击操作栏上的按钮时,它会获取在ListFragment视图中选择的内容,并启动一个新的活动来编辑所选的客户端(或者如果同时单击了其他选项,则会创建一个新客户端) 这一切都很好。ClientListView片段和ClientDe

我在这里试过“固定”罐子:

并且完全重新安装了SDK,这两种方法都没有解决我在这里遇到的问题。那么,
startActivityForResult
仅仅是
ListFragment
的一个禁忌吗

原职:

我有一个
ClientListView
,它是一个
ListFragment
,当单击操作栏上的按钮时,它会获取在
ListFragment
视图中选择的内容,并启动一个新的活动来编辑所选的客户端(或者如果同时单击了其他选项,则会创建一个新客户端)

这一切都很好。
ClientListView
片段和
ClientDetailsFragment
被my
EditClientActivity
FragmentActivity(调用
ClientEdit
片段)替换。这占据了整个屏幕,并在操作栏中创建了一个保存/取消按钮

问题是,单击保存时,我无法使用新创建的客户端或编辑的客户端更新我的
ListFragment
。为了完整起见,这是我的呼叫订单:

MainActivity FragmentActivity
设置
ClientListView ListFragment
ClientDetailsActivity FragmentActivity
(其中包含
ClientDetails
片段)。然后,
ClientListView ListFragment
在其新的或编辑客户端选项被选中时,可以在
EditClientActivity
上启动策略性纠正结果(其中包含
ClientEdit
片段)

ClientEdit
片段为保存取消设置选项菜单,一旦选择了
ClientEdit
片段中的保存,就会发生以下几种情况:

新客户端或已编辑的客户端将保存到数据库中。 调用了
mEditListener.onEditComplete()
。作为调用的
FragmentActivity
EditClientActivity
实现了一个
onEditCompleteListener
,我在
ClientEdit
片段中使用了
onAttach

因此,我的
EditClientActivity
具有
onEditComplete(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();
        }                       
}

问题是我的
startactivityforresult
从列表片段调用
EditClientActivity
?据我所知,从不调用ActivityResult的
。我提供了所有这些信息,试图弄清楚和弄清楚片段/片段活动以及类似活动是如何相互作用的。我是这样做的,从我在教程、开发者指南等方面学到的东西。我对自己的进步感到非常高兴,但现在有了一堵墙……我可能意识到我做事情的方式不是正确的方式……我希望受到启发。对我来说,android最难的部分是管理所有这些活动和视图之间的交互方式……

您是否使用片段的兼容性库


兼容性包存在问题,片段中的onActivityResult已损坏。看看这里。在那里,你还可以下载一个jar文件的固定版本。

怪胎发现了这一点。这是我使用结果/请求代码的方式:

startActivityForResult(意图、活动、结果\u正常)


不是启动它的方式,在那里添加了另一个数字而不是
活动。结果\u OK
成功了,我一定会感到困惑。

我知道这个问题很老,但是我想为那些遇到这个问题的人提供一个解决方案,就像我在搜索当从片段内部调用
意图时,
onActivityResult
为什么没有运行时一样(
ListFragment
或常规
fragment
将得到相同的结果)

您必须从主要活动中调用您的
startActivityForResult
。因此,当您从以下片段内部调用它时,请确保调用
getActivity()

getActivity().startActivityForResult(Intent,ACTIVITY_INT);

你知道如果那是放在额外文件夹里的罐子会怎么样吗。我猜我抓住了固定的一个,让它撕裂。如果是这样,那么我的活动应该工作,我希望?更新适配器以更新列表的方式正确吗?也就是说,onActivityResult?onActivityResult中的代码应该可以与那个固定jar一起工作,试试看,只需切换jar就可以了。得到那个固定jar,重新构建,放入断点我的公共类ClientListView Extendes ListFragment中仍然没有触发onActivityResult。我不确定要继续什么。无论如何,你应该使用那个常量,它要求一个请求代码来识别你的请求,并且你试图传递一个结果代码,在结果活动完成时使用该代码。