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()+"");
?
我正在使用自定义对象测试一个简单的网格适配器,应用程序在设备上运行没有问题,但保持空白,而不是使用指定的网格项填充 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()+"");
?