2016-04-08 27 views
9

我是android新手。我正在使用一個片段。我在onResult()方法中出現錯誤。我需要一個替代方法setResult(RESULT_OK,數據),我可以在我的片段中使用。請幫忙。在片段中是否有類似setResult()的方法?

CalendarFragment

package app.pal.study.samplestudy; 

import android.app.Fragment; 
import android.content .Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 
import java.util.Date; 
import java.util.List; 

public class CalendarFragment extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_calendar, container, false); 
    return rootView; 
} 


@Override 
public void onResume() { 
    super.onResume(); 
    refresh(); 
} 

private void refresh() { 
    CalendarEventDataSource dataSource = new CalendarEventDataSource(getActivity()); 
    dataSource.openReadOnlyDB(); 
    final List<CalendarEvent> calendarEvents = dataSource.getAllEvents(); 
    dataSource.close(); 
    CalAllEventsListAdapter adapter = new CalAllEventsListAdapter(calendarEvents); 
    ListView listView = (ListView) getView().findViewById(R.id.all_event_list); 
    listView.setAdapter(adapter); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     end(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 



public void onBackPressed() { 
    end(); 
} 

private void end() { 
    Intent data = new Intent(); 
    data.putExtra(Constants.DATE_KEY, (Date)(getArguments().get(Constants.DATE_KEY))); 
    setResult(RESULT_OK, data); 
    } 
} 
+0

什麼是錯誤..? –

+1

setResult用於由startActivityForResult調用的活動。你應該使用接口回調。 – Nanoc

+0

@AbhishekPatel錯誤:(58,19)錯誤:無法找到符號變量RESULT_OK – PersianBlue

回答

15

你應該把它在你的片段擁有活動:

getActivity().setResult(Activity.RESULT_OK, data) 

你也可能要完成你的活動:

getActivity().finish(); 
+0

RESULT_OK仍然會拋出錯誤 – PersianBlue

+0

'拋出錯誤 - - 你是什麼意思?編譯器可以顯示錯誤,這是編譯期間。異常可以在執行期間拋出 - 那麼你應該看看logcat中的調用堆棧。 – marcinj

+0

也許當你啓動你的活動片段時也可以使用startActivityForResult – MojioMS

1

使用

getActivity().setResult(Activity.RESULT_OK, data); 
1

使用這可能是幫助你..

getActivity().setResult(Activity.RESULT_OK, data); 
5

如果你開始從另一個片段的片段。

您需要使用:

/** 
* Optional target for this fragment. This may be used, for example, 
* if this fragment is being started by another, and when done wants to 
* give a result back to the first. The target set here is retained 
* across instances via {@link FragmentManager#putFragment 
* FragmentManager.putFragment()}. 
* 
* @param fragment The fragment that is the target of this one. 
* @param requestCode Optional request code, for convenience if you 
* are going to call back with {@link #onActivityResult(int, int, Intent)}. 
*/ 

public void setTargetFragment(Fragment fragment, int requestCode) { 
} 

當開始您的片段。

像這樣:

Fragment newFragment = new YourFragment(); 
newFragment .setTargetFragment(this, SOME_REQUEST_INT); 

,然後在YourFragment

Intent data = new Intent(); 
data.putExtra(Constants.DATE_KEY, (Date)(getArguments().get(Constants.DATE_KEY))); 
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent); 

或者

getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_CANCELED, null); 
相關問題