我发生了一件奇怪的事情,我不确定如何诊断。这是问题所在。
什么有效: 在纵向模式下打开应用程序,然后转到横向模式 - 两个方向都正确填充。
什么不起作用: 在横向模式下打开应用程序 - 列表视图为空。但如果我把它变成肖像它会填充,然后转回横向,一切都仍然正确填充。
这仅适用于首次加载的应用,且仅在手机处于横向状态时才会启用。如果应用程序打开,屏幕关闭,手机转为横向,屏幕打开,则不会发生此行为。
其他信息: 该应用程序正在使用ViewPager,它将打开第一个部分片段,并在启动片段之前填充列表视图的数据。这两种方向都会正确发生。
我可以开始寻找诊断结果的任何想法吗?
- 编辑 我不确定哪些代码会有用,但这里有一些代码。我已经跟踪调试程序的流程,所有内容都正确填充但没有ListViews。填充传递的列表,阵列适配器正确生成视图,一切看起来都正确但屏幕上没有任何内容。同样,这仅适用于应用程序的初始加载,并且仅在手机启动为横向时。快速翻转到肖像和背部,一切都很好。
MainActivity的onCreate减去页面更改侦听器
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rootactivitylayout);
//create default and upgrade database
DBHelper db = new DBHelper(getApplicationContext());
db.closeDB();
((ExtendedApp) this.getApplication()).initializeGlobals();
PopulateUpgradeList(this);
PopulateShipList(this);
PopulateSquadronList(this);
PopulateObjectiveList(this);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOffscreenPageLimit(2);
页面片段的onCreateView直到填充的第一个列表视图
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
isLoading = true;
thiscontext = container.getContext();
//handle ships
//------------------------
View view = inflater.inflate(R.layout.fragarmada, container, false);
ArrayList<Ship> tmpList = justShipTypes();
ShipAdapt = new AA_Armada_Ships(thiscontext, tmpList);
ListView tmplv = (ListView) view.findViewById(R.id.lvAShipList);
tmplv.setAdapter(ShipAdapt);
tmplv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
shipPopup((Ship) view.getTag());
}
});
数组适配器的代码
public View getView(int position, View convertView, ViewGroup parent){
isLoading = true;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.rowarmada_ships, parent, false);
}
Ship tmpShip = (Ship) getItem(position);
ImageView tmpiv = (ImageView) convertView.findViewById(R.id.ivARowShipIcon_Header);
TextView tmptv = (TextView) convertView.findViewById(R.id.tvARowShipTitle_Header);
LinearLayout tmpll = (LinearLayout) convertView.findViewById(R.id.llARowShipURL);
CheckBox tmpOwned = (CheckBox) tmpll.findViewById(R.id.ckARowShipOwned);
Button tmpURL = (Button) tmpll.findViewById(R.id.btnARowShipURL);
Ship.setShipPic(tmpiv, tmpShip.Type ,true,false);
tmptv.setText(tmpShip.Type);
tmpOwned.setChecked(tmpShip.isOwned);
tmpOwned.setTag(tmpShip);
tmpURL.setTag(tmpShip.URL);
tmpOwned.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton pckView, boolean pisChecked) {
if(! isLoading) {
((Ship) pckView.getTag()).setOwned((Activity) pckView.getContext());
}
}
});
tmpURL.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse((String) view.getTag()));
view.getContext().startActivity(i);
}
});
convertView.setTag(tmpShip);
isLoading = false;
return convertView;
}
答案 0 :(得分:0)
最后,终于弄清楚发生了什么。它与主要布局的宽度设置和第二层宽度设置有关。出于某种原因,在横向和仅在初始应用程序启动时,布局宽度将无法正确分层,我将得到一个空白屏幕。
hoorrah!