activity 是空白 自定义 gird 适配器代码有问题吗?

The activity is blank something wrong with the custom gird Adapter code?

我正在使用自定义对象测试一个简单的网格适配器,应用程序在设备上运行没有问题,但保持空白,而不是使用指定的网格项填充 activity。这是我的代码。

主要Activity

package com.example.nobodyme.errorrepository;

  import android.app.Activity;
  import android.os.Bundle;
  import android.support.v7.app.ActionBarActivity;
  import android.widget.AdapterView;
  import android.widget.ArrayAdapter;
  import android.widget.GridView;
  import android.widget.TextView;
  import android.widget.Toast;
  import android.view.View;
  import android.widget.AdapterView.OnItemClickListener;

  import java.util.ArrayList;

  public class MainActivity extends ActionBarActivity {

  GridView gridView;


  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  ArrayList<GridItems> gridItems = new ArrayList<>();
  gridItems.add(new GridItems("Android", 2));
  gridItems.add(new GridItems("Java", 3));

  gridView = (GridView) findViewById(R.id.gridView1);

  gridView.setAdapter(new GridViewAdapter(this, gridItems));



  }

  }

GridViewAdapter

    package com.example.nobodyme.errorrepository;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;

    import java.util.List;



    public class GridViewAdapter extends ArrayAdapter<GridItems> {

        private Context context;
        int b;

        public GridViewAdapter(Context context, List<GridItems> gridItems) {
            super(context, 0, gridItems);
            b=gridItems.size();
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            View gridView = convertView;

            if(gridView == null)
            {

                gridView = LayoutInflater.from(getContext()).inflate(
                                           R.layout.grid_view, parent, false);

            }

            GridItems currentgriditem = getItem(position);

            TextView mMaintextView = (TextView) gridView.findViewById(R.id.grid_item_main);
            mMaintextView.setText(currentgriditem.getTitle());


            TextView mUnansweredtextView = (TextView) gridView.findViewById(R.id.grid_item_unanswered);
            mUnansweredtextView.setText(currentgriditem.getUnansweredNo());


            return gridView;

        }

        @Override
        public int getCount() {
            return b;
        }


        @Override
        public long getItemId(int position) {
            return 0;
        }

    }

网格项

package com.example.nobodyme.errorrepository;

/**
 * Created by nobodyme on 15/1/17.
 */

public class GridItems {

    /** Grid title*/
    private String mTitle;

    /** NO of unanswered items in the gird **/
    private Integer mUnansweredNo;

    public GridItems(String Title, Integer UnansweredNo) {
        mTitle = Title;
        mUnansweredNo = UnansweredNo;
    }



    public String getTitle() {
        return mTitle;
    }


    public Integer getUnansweredNo() {
        return mUnansweredNo;
    }


}

我已经根据评论编辑了代码,应用程序仍然崩溃。

您正在覆盖适配器中的 getCount 和 return 零。不要覆盖它,或者 return 正确的项目数。

请检查以下代码:

@Override
public int getCount() {
    return gridItems.size();
}

而不是 0 returning,您应该 return 您的列表大小。

为了告诉适配器要显示多少个 GridItem,我们需要重写 getCount 方法,如上所示 @samsad。

编译器抱怨它无法识别符号 griditems 的原因是因为您没有创建一个字段来存储对适配器中 GridItems 的引用。

尝试在您的适配器中为 GridItems 的 ArrayList 创建一个字段来解决此问题。

您需要在 arrayAdapter 上定义 gridItems List 并将其设置在构造函数上 并将 getCount 覆盖为 return gridItems (adapterGridItems) 大小

    private List<GridItems> adapterGridItems;

    public GridViewAdapter(Context context, List<GridItems> gridItems) {
            super(context, 0, gridItems);
            //set adapterGridItems
            this.adapterGridItems=gridItems;
     }
     @Override
     public int getCount() {
         return adapterGridItems.size();
     }

请检查

mMaintextView.setText(currentgriditem.getUnansweredNo());

你传递的是一个整数,所以 mMainTextView.setText 会找到一个 ID 为 currentgriditem.getUnansweredNo() 的资源,我认为你试图将 currentgriditem.getUnansweredNo() 设置为字符串,所以这将工作

mMaintextView.setText(currentgriditem.getUnansweredNo()+"");

你确定那是 mMaintextView.setText(currentgriditem.getUnansweredNo()+"");

而不是

mUnansweredtextView.setText(currentgriditem.getUnansweredNo()+""); 

?