2014-11-05 5 views
1

사용자 정의 xml 레이아웃이있는 DialogFragment 클래스가 있습니다. onCreateView()에서 버튼에 대한 참조를 얻습니다. 그것을 클릭하여 파일을 선택하십시오. 그것은 레이아웃 인플레이터를 사용하여 1) 그것은 그 값 ListView, ListArray, SimpleAdapter에 세 개의 변수를 초기화) 현재의 2에 다른 XML 레이아웃을 추가, 이들은 상단에 선언 된 멤버 변수입니다 는 클릭 것 두 가지 일이 수업의 3) 그럼 getActivity().startActivityForResult()onActivityResult 후에 값이 null로 설정됩니다.

을 호출합니다. 문제점 : 대화 상자 단락으로이 액티비티로 돌아 가면 위에서 설명한 세 개의 변수가 null로 설정됩니다.

//before calling startActivityForResult() 
I/NULLTEST SIMPLEADAPTER﹕ [email protected] 
I/NULLTEST ATTACHMENTSLISTVIEW﹕ android.widget.ListView{64d1c2e0 VFED.VC. ......I. 0,0-0,0 #7f090014 app:id/attachmentsListView} 
I/NULLTEST ATTACHMENTSLISTARRAY﹕ [{a_date_added=Added: Nov 1, a_name=My test file 0}, {a_date_added=Added: Nov 2, a_name=My test file 1}, {a_date_added=Added: Nov 3, a_name=My test file 2}] 
// Inside onActivityResult() 
I/NULLTEST SIMPLEADAPTER ONRESULT﹕ null 
I/NULLTEST ATTACHMENTSLISTVIEW ONRESULT﹕ null 
I/NULLTEST ATTACHMENTSLISTARRAY ONRESULT﹕ [] 

이 모든 코드가 DialogFragment 내에서 호출되는 :



여기에 무슨 일이 일어나고 있는지에 대한 자세한 버전입니다. startActivityForResult()을 호출하기 전에 위에서 볼 수 있듯이 세 변수 SimpleAdapter, ListViewArrayList이 약간의 값으로 설정됩니다. 그것들은 모두 멤버 변수이므로이 클래스의 아무 곳에서나 호출 될 수 있습니다. onCreateView() 내부에있는 방법은 DialogFragment입니다. 대화 상자의 버튼 부분을 참조하고 버튼에 setOnClickListener()을 첨부합니다. 이 버튼을 클릭하면 위에서 설명한 세 변수가 값으로 초기화되고 값을 기록하기 위해 Log.i을 사용합니다. onClick() 버튼은 getActivity().startActivityForResult();을 호출하여 파일을 선택할 수있게하여 전혀 다른 Activity을 열 수 있습니다. 나는 파일을 선택하고 내 MainActivity.java 인 호스트 ActivityonActivityResult() 메소드가 호출됩니다. 여기에서 데이터 등의 DialogFragment에 전달된다

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

이제 I는 DialogFragment 내부하지만의 데이터에 액세스 할 수있는 DialogFragment하지 ActivityonActivityResult, 널로 설정되어 전술 한 세 개의 변수하지만 버튼 클릭만으로 초기화되지만 startActivityForResult() 등으로 호출됩니다. 나는 그들이 왜 다시 null로 설정되었는지 이해하지 못한다. 여기서 중요한 걸 놓치고 있니? 이것 때문에 나는 예를 들어 simpleAdapter.notifyDataSetChanged()을 부를 수 없다. DialogFragment 대신 Activity에서 이렇게하면 내 listview를 업데이트하는 정확한 방법이 있지만 DialogFragment 안에이 작업을 수행해야합니다. 또한 다른 활동에서 데이터를 검색 한 후 listview를 업데이트하는 다른 방법도 환영합니다. 더 많은 데이터를 선택하면 해당 목록 뷰를 업데이트하는 방법이 필요합니다.

FINAL UPDATE

내가 만들고 있었다 어리 석음의 높이에 대해 사과하고 싶습니다. Activity이 인데이 Activity을 호출하면 onActivityResult()을 호출 할 것입니다. new MyDialogFragment().onActivityResult()과 같은 대화 상자 조각의 새 인스턴스를 만듭니다. 분명히 이번에는 onCreateView이 호출되지 않아서 어떤 방법으로도 작업하지 않았습니다. 내가 실제로 표시하고 이전에 초기화 된 대화 상자 조각에 대한 변경 new MyDialogFragment()을 가지고 있습니다. 이제 모든 것이 작동합니다. 그리고 나는이 질문을 닫을 것이다.

답변

0

요청 코드가 올바른 코드인지 확인하십시오.다른 코드를 요청할 수도 있습니다.

+0

정확합니다. onActivityResult에서받는 데이터가 정확합니다. – someguy234

+0

또한'iv.setImageURI (data.getData());'와 같은 것을 호출하고'iv'도 똑같은 방식으로 생성됩니다. 'iv = ImageView' – someguy234

0

사용을 시작하기 전에 활동을 시작하십시오.

intent.putExtra("return-data", true); 
+0

. 여전히 변수가 비어 있습니다. – someguy234

+0

@ someguy234 이것에 대한 해결책이 있습니까? –

관련 문제