Android 为什么在我旋转手机时会调用onActivityCreated两次?
我有一个fragment类,它通过Activity类调用一个函数,该类在fragment中为我的自定义ListView返回一个适配器,但是看起来适配器是在事件列表完成之前返回的。所以我的自定义listview没有显示在片段中 这是我的碎片分类:Android 为什么在我旋转手机时会调用onActivityCreated两次?,android,android-layout,android-activity,android-fragments,Android,Android Layout,Android Activity,Android Fragments,我有一个fragment类,它通过Activity类调用一个函数,该类在fragment中为我的自定义ListView返回一个适配器,但是看起来适配器是在事件列表完成之前返回的。所以我的自定义listview没有显示在片段中 这是我的碎片分类: package newcomer.fragment; import java.util.ArrayList; import com.fb.newcomersapp.CustomListAdapter; import com.fb.newcomersa
package newcomer.fragment;
import java.util.ArrayList;
import com.fb.newcomersapp.CustomListAdapter;
import com.fb.newcomersapp.Event;
import com.fb.newcomersapp.R;
import android.app.Activity;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
public class FeedFragment extends Fragment{
private static ListView listView;
private static TextView textView;
EventListListener mCallback;
private ArrayList<Event> eventList;
private CustomListAdapter adapter;
public interface EventListListener{
public String getLocal();
public CustomListAdapter parseQueryEvents();
public CustomListAdapter adaptEventList();
public void openEvent(int position);
public ArrayList<Event> getEventList();
}
/* (non-Javadoc)
* @see android.app.Fragment#onActivityCreated(android.os.Bundle)
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
listView = (ListView) getView().findViewById(R.id.event_list_view);
adapter = mCallback.parseQueryEvents();
Log.d("FeedFragment", "Adapter já foi chamado");
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
mCallback.openEvent(position);
}
});
}
/* (non-Javadoc)
* @see android.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.d("FeedFragment", "onCreateView");
View view = inflater.inflate(R.layout.fragment_feed, container, false);
textView = (TextView) view.findViewById(R.id.tv_header);
textView.setText(mCallback.getLocal());
return view;
}
/* (non-Javadoc)
* @see android.app.Fragment#onAttach(android.app.Activity)
*/
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (EventListListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement EventListListener");
}
}
}
package newcommer.fragment;
导入java.util.ArrayList;
导入com.fb.newcomersapp.CustomListAdapter;
导入com.fb.newcomersapp.Event;
导入com.fb.newcomersapp.R;
导入android.app.Activity;
导入android.app.Fragment;
导入android.app.ProgressDialog;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListView;
导入android.widget.TextView;
公共类FeedFragment扩展了FeedFragment{
私有静态ListView ListView;
私有静态文本视图文本视图;
事件列表侦听器mCallback;
私有ArrayList事件列表;
专用自定义列表适配器;
公共接口EventListListener{
公共字符串getLocal();
公共CustomListAdapter parseQueryEvents();
公共CustomListAdapter AdapterEventList();
公共开孔(内部位置);
公共ArrayList getEventList();
}
/*(非Javadoc)
*@see android.app.Fragment#onActivityCreated(android.os.Bundle)
*/
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onActivityCreated(savedInstanceState);
listView=(listView)getView().findViewById(R.id.event\u list\u view);
adapter=mCallback.parseQueryEvents();
Log.d(“FeedFragment”,“Adapter jáfoi chamado”);
adapter.notifyDataSetChanged();
setAdapter(适配器);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//TODO自动生成的方法存根
mCallback.openEvent(位置);
}
});
}
/*(非Javadoc)
*@see android.app.Fragment#onCreateView(android.view.LayoutInflater、android.view.ViewGroup、android.os.Bundle)
*/
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//TODO自动生成的方法存根
Log.d(“FeedFragment”、“onCreateView”);
视图=充气机。充气(R.layout.fragment\u feed,container,false);
textView=(textView)view.findViewById(R.id.tv_头);
setText(mCallback.getLocal());
返回视图;
}
/*(非Javadoc)
*@see android.app.Fragment#onAttach(android.app.Activity)
*/
@凌驾
公共事务主任(活动){
//TODO自动生成的方法存根
超级转速计(活动);
//这确保容器活动已实现
//回调接口。如果不是,则抛出异常
试一试{
mCallback=(EventListListener)活动;
}catch(ClassCastException e){
抛出新的ClassCastException(activity.toString()
+“必须实现EventListListener”);
}
}
}
调用的函数:
public synchronized CustomListAdapter parseQueryEvents () {
eventList = new ArrayList<Event>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Event");
query.orderByAscending("startDate") ;
query.whereGreaterThanOrEqualTo("endDate", new Date()) ;
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> parseEventList, ParseException e) {
if (e == null) {
ParseObject temp ;
Iterator<ParseObject> i = parseEventList.iterator() ;
while(i.hasNext()) {
temp = i.next();
eventList.add(new Event(temp)) ;
}
Log.d("FeedActivity", "Eventos: "+eventList.size());
} else {
Log.d("FeedActivity", e.getMessage());
}
}
});
return adaptEventList();
}
public synchronized CustomListAdapter adaptEventList() {
CustomListAdapter adapter = new CustomListAdapter(this, eventList);
Log.d("FeedActivity", "Adapter Criado");
return adapter;
}
public synchronized CustomListAdapter parseQueryEvents(){
eventList=新的ArrayList();
ParseQuery=ParseQuery.getQuery(“事件”);
query.orderByAscending(“startDate”);
query.whereGreaterThanOrEqualTo(“endDate”,new Date());
findInBackground(新的FindCallback(){
public void done(List parseEventList,ParseException e){
如果(e==null){
分析对象温度;
迭代器i=parseEventList.Iterator();
while(i.hasNext()){
temp=i.next();
添加(新事件(临时));
}
Log.d(“FeedActivity”、“Eventos:+eventList.size());
}否则{
Log.d(“FeedActivity”,e.getMessage());
}
}
});
返回adaptEventList();
}
公共同步CustomListAdapter AdapterEventList(){
CustomListAdapter=新的CustomListAdapter(此,事件列表);
日志d(“FeedActivity”、“Adapter Criado”);
返回适配器;
}
日志:
02-05 09:43:17.065:D/FeedFragment(27880):onCreateView
02-05 09:43:17.113:D/网络(27880):网络
02-05 09:43:17.122:D/网络(27880):网络
02-05 09:43:17.772:D/FeedActivity(27880):适配器Criado
02-05 09:43:17.772:D/FeedFragment(27880):适配器jáfoi chamado
02-05 09:43:17.790:I/编舞(27880):跳过了46帧!应用程序可能在其主线程上做了太多工作。
02-05 09:43:17.832:I/Adreno EGL(27880)::EGL 1.4高通构建:AU_LINUX_ANDROID_LNX.LA.3.5.1_RB1.04.04.02.048.018_msm8610_LNX.LA.3.5.1_RB1_发布
02-05 09:43:17.832:I/Adreno EGL(27880):OpenGL ES着色器编译器版本:E031.24.00.08
02-05 09:43:17.832:I/Adreno EGL(27880):建造日期:2014年7月3日星期五
02-05 09:43:17.832:I/Adreno EGL(27880):当地分行:
02-05 09:43:17.832:I/Adreno EGL(27880):远程分支:quic/LNX.LA.3.5.1_RB1.1
02-05 09:43:17.832:I/Adreno EGL(27880):局部贴片:无
02-05 09:43:17.832:I/Adreno EGL(27880):重构分支:AU_LINUX_ANDROID_LNX.LA.3.5.1_RB1.04.04.02.048.018+f2fd134+NOTHING
02-05 09:43:17.858:D/OpenGLRenderer(27880):启用调试模式0
02-05 09:43:18.377:D/反馈活动(27880):事件:3
02-05 09:43:37.652:D/FeedFragment(27880):onCreateView
02-05 09:43:37.708:D/网络(27880):网络
02-05 09:43:37.721:D/网络(27880):网络
02-05 09:43:38.398:D/FeedActivity(27880):适配器Criado
02-05 09:43:38.398:D/FeedFragment(27880):适配器jáfoi chamado
02-05 09:43:38.399:D/FeedFragment(27880):onCreateView
02-05 09:43:38.428:D/网络(27880):网络
02-05 09:43:38.431:D/网络(27880):网络
02-05 09:43:39.133:D/FeedActivity(27880):适配器Criado
02-
02-05 09:43:17.065: D/FeedFragment(27880): onCreateView
02-05 09:43:17.113: D/Network(27880): Network
02-05 09:43:17.122: D/Network(27880): Network
02-05 09:43:17.772: D/FeedActivity(27880): Adapter Criado
02-05 09:43:17.772: D/FeedFragment(27880): Adapter já foi chamado
02-05 09:43:17.790: I/Choreographer(27880): Skipped 46 frames! The application may be doing too much work on its main thread.
02-05 09:43:17.832: I/Adreno-EGL(27880): <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LNX.LA.3.5.1_RB1.04.04.02.048.018_msm8610_LNX.LA.3.5.1_RB1_ release_AU ()
02-05 09:43:17.832: I/Adreno-EGL(27880): OpenGL ES Shader Compiler Version: E031.24.00.08
02-05 09:43:17.832: I/Adreno-EGL(27880): Build Date: 03/07/14 Fri
02-05 09:43:17.832: I/Adreno-EGL(27880): Local Branch:
02-05 09:43:17.832: I/Adreno-EGL(27880): Remote Branch: quic/LNX.LA.3.5.1_RB1.1
02-05 09:43:17.832: I/Adreno-EGL(27880): Local Patches: NONE
02-05 09:43:17.832: I/Adreno-EGL(27880): Reconstruct Branch: AU_LINUX_ANDROID_LNX.LA.3.5.1_RB1.04.04.02.048.018 + f2fd134 + NOTHING
02-05 09:43:17.858: D/OpenGLRenderer(27880): Enabling debug mode 0
02-05 09:43:18.377: D/FeedActivity(27880): Eventos: 3
02-05 09:43:37.652: D/FeedFragment(27880): onCreateView
02-05 09:43:37.708: D/Network(27880): Network
02-05 09:43:37.721: D/Network(27880): Network
02-05 09:43:38.398: D/FeedActivity(27880): Adapter Criado
02-05 09:43:38.398: D/FeedFragment(27880): Adapter já foi chamado
02-05 09:43:38.399: D/FeedFragment(27880): onCreateView
02-05 09:43:38.428: D/Network(27880): Network
02-05 09:43:38.431: D/Network(27880): Network
02-05 09:43:39.133: D/FeedActivity(27880): Adapter Criado
02-05 09:43:39.133: D/FeedFragment(27880): Adapter já foi chamado
02-05 09:43:39.146: I/Choreographer(27880): Skipped 95 frames! The application may be doing too much work on its main thread.
02-05 09:43:39.190: W/View(27880): requestLayout() improperly called by android.widget.ListView{41d65188 IFED.VC. ......ID -360,0-0,442 #7f050041app:id/list_slidermenu} during layout: running second layout pass
02-05 09:43:39.193: D/FeedActivity(27880): Eventos: 3
02-05 09:43:39.559: D/FeedActivity(27880): Eventos: 6