我正在构建一个ListFragment。在纵向它需要两个标题,但在横向我需要这些标题在左侧与ListView在右侧。xml处理不同的布局,而java处理正确的填充/更新它们。
除了在方向改变时,标题不会与列表一起保留之外,所有内容都像广告中所说的那样工作。listView甚至保留了滚动,但通过删除标题进行了移动。
嵌套一个片段可能会更好,但是listview不会包含framelayout,所以这是一个值得商议的问题。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
loadFeeds();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_profile, container, false);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
setupList(savedInstanceState);
setupOrienation();
super.onActivityCreated(savedInstanceState);
}
private void setupList(Bundle savedInstanceState) {
if(getListAdapter() == null) {
listProfileButtons = (View)getLayoutInflater(savedInstanceState).inflate(R.layout.view_profile_buttons, null);
listProfile = (View)getLayoutInflater(savedInstanceState).inflate(R.layout.view_profile_header, null);
getListView().addHeaderView(listProfile);
getListView().addHeaderView(listProfileButtons);
}
}
private void setupOrienation(){
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
listProfile.setVisibility(View.GONE);
listProfileButtons.setVisibility(View.GONE);
setupProfile(getView());
setupButtons(getView());
getListView().setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
} else {
listProfile.setVisibility(View.VISIBLE);
listProfileButtons.setVisibility(View.VISIBLE);
//setupProfile(getListView());
//setupButtons(getListView());
setupButtons(getView().findViewById(R.id.include_profile_buttons));
getListView().setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(firstVisibleItem > 0) {
getView().findViewById(R.id.include_profile_buttons).setVisibility(View.VISIBLE);
} else {
getView().findViewById(R.id.include_profile_buttons).setVisibility(View.GONE);
}
}
});
}
}
private void setupProfile(View parent) {
Bundle userBundle = getArguments();
TextView name = (TextView)parent.findViewById(R.id.text_view_profile_name);
TextView screenName = (TextView)parent.findViewById(R.id.text_view_profile_at_user);
ImageView image = (ImageView)parent.findViewById(R.id.image_view_profile_picture);
name.setText(userBundle.getString(User.USER_NAME));
screenName.setText("@" + userBundle.get(User.SCREEN_NAME));
ImageCacheManager.getInstance(getActivity()).bindDrawable(userBundle.getString(User.PROFILE_IMAGE), image);
}
private void setupButtons(View v) {
Bundle userBundle = getArguments();
Button buttonTweets = (Button)v.findViewById(R.id.button_number);
Button buttonFollowing = (Button)v.findViewById(R.id.button_follow);
Button buttonFollowers = (Button)v.findViewById(R.id.button_friends);
buttonTweets.setText(getResources().getString(R.string.profile_number, userBundle.getInt(User.NUMBER)));
buttonFollowing.setText(getResources().getString(R.string.profile_number_follow, userBundle.getInt(User.NUMBER_OF_FOLLOW)));
buttonFollowers.setText(getResources().getString(R.string.profile_number_friends, userBundle.getInt(User.NUMBER_OF_FRIENDS)));
buttonTweets.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switchListAdapter(adapter);
}
});
buttonFollowing.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switchListAdapter(followAdapter);
}
});
buttonFollowers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switchListAdapter(friendsAdapter);
}
});
}
注释代码这样做是为了在标头丢失后停止空指针异常。
发布于 2013-03-19 21:18:19
因此,在旋转时,所有视图都会被销毁,这意味着头文件。我相信当你setRatainInstance(真)的时候,它应该处理ListFragment头中的头,但事实并非如此。要在使用retainInstance的ListFragment中使用标头,您必须执行以下操作:
@Override
public void onDestroyView() {
setListAdapter(null);
super.onDestroyView();
}
然后我只在我需要的方向上添加标题,这很好。它的负面部分是scroll isn't retained,我必须弄清楚应该在哪个适配器中。不过,这些只是几个方法,这还不算太糟糕。
https://stackoverflow.com/questions/15442073
复制相似问题