仅在横向打开应用程序时,ListView无数据

时间:2016-12-27 19:35:02

标签: android listview

我发生了一件奇怪的事情,我不确定如何诊断。这是问题所在。

什么有效: 在纵向模式下打开应用程序,然后转到横向模式 - 两个方向都正确填充。

什么不起作用: 在横向模式下打开应用程序 - 列表视图为空。但如果我把它变成肖像它会填充,然后转回横向,一切都仍然正确填充。

这仅适用于首次加载的应用,且仅在手机处于横向状态时才会启用。如果应用程序打开,屏幕关闭,手机转为横向,屏幕打开,则不会发生此行为。

其他信息: 该应用程序正在使用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;
    }

1 个答案:

答案 0 :(得分:0)

最后,终于弄清楚发生了什么。它与主要布局的宽度设置和第二层宽度设置有关。出于某种原因,在横向和仅在初始应用程序启动时,布局宽度将无法正确分层,我将得到一个空白屏幕。

hoorrah!