사용자 정의 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
, ListView
및 ArrayList
이 약간의 값으로 설정됩니다. 그것들은 모두 멤버 변수이므로이 클래스의 아무 곳에서나 호출 될 수 있습니다. onCreateView()
내부에있는 방법은 DialogFragment
입니다. 대화 상자의 버튼 부분을 참조하고 버튼에 setOnClickListener()
을 첨부합니다. 이 버튼을 클릭하면 위에서 설명한 세 변수가 값으로 초기화되고 값을 기록하기 위해 Log.i
을 사용합니다. onClick()
버튼은 getActivity().startActivityForResult();
을 호출하여 파일을 선택할 수있게하여 전혀 다른 Activity
을 열 수 있습니다. 나는 파일을 선택하고 내 MainActivity.java
인 호스트 Activity
의 onActivityResult()
메소드가 호출됩니다. 여기에서 데이터 등의 DialogFragment
에 전달된다
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
이제 I는 DialogFragment
내부하지만의 데이터에 액세스 할 수있는 DialogFragment
하지 Activity
의 onActivityResult
, 널로 설정되어 전술 한 세 개의 변수하지만 버튼 클릭만으로 초기화되지만 startActivityForResult()
등으로 호출됩니다. 나는 그들이 왜 다시 null로 설정되었는지 이해하지 못한다. 여기서 중요한 걸 놓치고 있니? 이것 때문에 나는 예를 들어 simpleAdapter.notifyDataSetChanged()
을 부를 수 없다. DialogFragment
대신 Activity
에서 이렇게하면 내 listview를 업데이트하는 정확한 방법이 있지만 DialogFragment
안에이 작업을 수행해야합니다. 또한 다른 활동에서 데이터를 검색 한 후 listview를 업데이트하는 다른 방법도 환영합니다. 더 많은 데이터를 선택하면 해당 목록 뷰를 업데이트하는 방법이 필요합니다.
FINAL UPDATE
내가 만들고 있었다 어리 석음의 높이에 대해 사과하고 싶습니다. Activity
이 인데이 Activity
을 호출하면 onActivityResult()
을 호출 할 것입니다. new MyDialogFragment().onActivityResult()
과 같은 대화 상자 조각의 새 인스턴스를 만듭니다. 분명히 이번에는 onCreateView
이 호출되지 않아서 어떤 방법으로도 작업하지 않았습니다. 내가 실제로 표시하고 이전에 초기화 된 대화 상자 조각에 대한 변경 new MyDialogFragment()
을 가지고 있습니다. 이제 모든 것이 작동합니다. 그리고 나는이 질문을 닫을 것이다.
정확합니다. onActivityResult에서받는 데이터가 정확합니다. – someguy234
또한'iv.setImageURI (data.getData());'와 같은 것을 호출하고'iv'도 똑같은 방식으로 생성됩니다. 'iv = ImageView' – someguy234