Android 添加数据库后填充listview

Android 添加数据库后填充listview,android,sqlite,android-listview,android-adapter,android-gridview,Android,Sqlite,Android Listview,Android Adapter,Android Gridview,我有一个以片段形式显示数据的应用程序(使用webservice)。 登录后,fragment从json获取数据并添加到数据库中,然后我想将其填充到我的片段中。添加数据库后,我的片段没有显示任何内容 public class GridFragment extends Fragment { Context mContext; GridView gridd; GridAdapter adapter; MagazineGetIssues mgi; ArrayList<DataVal> Iss

我有一个以片段形式显示数据的应用程序(使用webservice)。 登录后,fragment从json获取数据并添加到数据库中,然后我想将其填充到我的片段中。添加数据库后,我的片段没有显示任何内容

public class GridFragment extends Fragment {
Context mContext;
GridView gridd;
GridAdapter adapter;
MagazineGetIssues mgi;
ArrayList<DataVal> Issues = new ArrayList<>();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mContext = getActivity();
    mgi = new MagazineGetIssues();
    DBOperation db = new DBOperation(getActivity());
    Issues = db.getIssues();
    adapter = new GridAdapter(getActivity(), Issues);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_grid, container, false);
    gridd = (GridView) rootView.findViewById(R.id.gridViewAA);
    gridd.setAdapter(adapter);
    //getting Issues
    mgi.getIssues(mContext);
    adapter.addList(Issues);
    return rootView;
  }
}
公共类GridFragment扩展片段{
语境;
GridView-gridd;
网格适配器;
mgi杂志;
ArrayList Issues=新建ArrayList();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mContext=getActivity();
mgi=新的Magazinegatissues();
DBOperation db=newdboperation(getActivity());
Issues=db.getIssues();
适配器=新的GridAdapter(getActivity(),问题);
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.fragment\u网格,容器,false);
gridd=(GridView)rootView.findviewbyd(R.id.gridViewAA);
设置适配器(适配器);
//遇到问题
mgi.getIssues(mContext);
adapter.addList(问题);
返回rootView;
}
}
GridAdapter类

public class GridAdapter extends BaseAdapter {

private final FragmentActivity activity;
ImageLoaderConfiguration imageLoaderConfiguration;
DisplayImageOptions displayImageOptions;
String url = "";
DisplayImageOptions imageOptions;
ImageLoader imLoad;
ArrayList<DataVal> issueList = null;

public GridAdapter(FragmentActivity activity, ArrayList<DataVal> cdate) {
    this.activity = activity;
    this.issueList = cdate;

    displayImageOptions = new DisplayImageOptions.
            Builder().cacheOnDisk(true).cacheInMemory(true)
            .imageScaleType(ImageScaleType.EXACTLY)
            .displayer(new FadeInBitmapDisplayer(300))
            .build();
    imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(activity)
            .defaultDisplayImageOptions(displayImageOptions).memoryCache(new WeakMemoryCache())
            .discCacheSize(100 * 1024 * 1024).build();
    ImageLoader.getInstance().init(imageLoaderConfiguration);
    imLoad = ImageLoader.getInstance();
    imageOptions = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true).resetViewBeforeLoading(true).build();

}


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

@Override
public Object getItem(int position) {
    return null;
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if (convertView == null) {
        LayoutInflater inflator = activity.getLayoutInflater();
        convertView = inflator.inflate(R.layout.grid_single, null);
        viewHolder = new ViewHolder();
        viewHolder.imView = (ImageView) convertView.findViewById(R.id.CoverPic);
        viewHolder.iss_date = (TextView) convertView.findViewById(R.id.issuedate);
        viewHolder.iss_price = (TextView) convertView.findViewById(R.id.price);
        convertView.setTag(viewHolder);

    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.iss_date.setText(issueList.get(position).getISSUE_DATE());
    viewHolder.iss_price.setText(issueList.get(position).getPRICE());
    imLoad.displayImage(url + issueList.get(position).getCOVER_PAGE_THUMB(), viewHolder.imView, imageOptions);
    return convertView;
}

public void addList(ArrayList<DataVal> val) {
    this.issueList = val;
    this.notifyDataSetChanged();
}

static class ViewHolder {
    protected TextView iss_date;
    protected TextView iss_price;
    protected ImageView imView;
  }
}
公共类GridAdapter扩展BaseAdapter{
私人最终碎片活动;
图像加载配置图像加载配置;
显示图像选项显示图像选项;
字符串url=“”;
显示图像选项图像选项;
图像加载程序imLoad;
ArrayList issueList=null;
公共GridAdapter(FragmentActivity活动,ArrayList cdate){
这个。活动=活动;
this.issueList=cdate;
displayImageOptions=新的displayImageOptions。
Builder().cacheOnDisk(true).cacheInMemory(true)
.imageScaleType(imageScaleType.Justice)
.显示器(新FadeInBitmapDisplayer(300))
.build();
imageLoaderConfiguration=新建imageLoaderConfiguration.Builder(活动)
.defaultDisplayImageOptions(displayImageOptions).memoryCache(新的WeakMemoryCache())
.discCacheSize(100*1024*1024).build();
ImageLoader.getInstance().init(imageLoaderConfiguration);
imLoad=ImageLoader.getInstance();
imageOptions=new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true).resetViewBeforeLoading(true).build();
}
@凌驾
public int getCount(){
返回issueList.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
LayoutFlater充气器=活动。GetLayoutFlater();
convertView=充气机充气(R.layout.grid_single,空);
viewHolder=新的viewHolder();
viewHolder.imView=(ImageView)convertView.findViewById(R.id.CoverPic);
viewHolder.iss_date=(TextView)convertView.findViewById(R.id.issuedate);
viewHolder.iss_price=(TextView)convertView.findViewById(R.id.price);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.iss_date.setText(issueList.get(position.getISSUE_date());
viewHolder.iss_price.setText(issueList.get(position.getPRICE());
显示图像(url+issueList.get(position).getCOVER\u PAGE\u THUMB(),viewHolder.imView,imageOptions);
返回视图;
}
公共无效地址列表(ArrayList val){
this.issueList=val;
this.notifyDataSetChanged();
}
静态类视窗夹{
受保护的文本视图iss_日期;
受保护的文本视图iss_价格;
受保护的图像视图;
}
}

尝试替换此行

 this.issueList = val;


BaseAdapter
中,更改适配器以扩展ArrayAdapter,并在启动适配器类时将列表传递给ArrayAdapter的超级构造函数

另外,在添加到列表后,不要忘记调用notifyDataSetChanged()


希望这有帮助。

您必须在BaseAdapter中添加一个方法来更新新数据:

ArrayList<DataVal> issueList = null;

完成

问题列表是否包含任何数据?是。我在loginactivity中也做了同样的测试(向数据库添加数据是在登录时完成的,并在片段中填充),为什么不能替换上面的行呢?仍然不能。我觉得这个碎片有点问题class@shine_joseph,您是否正在从数据库中获取更新的数据,可能是您再次获取相同的数据,请让我知道相同的数据。在我重新打开应用程序后,列表正在填充,因此我想我获取的数据是正确的。@shine\u joseph,在从数据库获取数据之前,请记录arraylist的大小,在获取数据库之后,它将帮助您检查是否正在获取更新的数据
ArrayList<DataVal> issueList = null;
 public void setUpdatedData(ArrayList<DataVal> newData){
    this.issueList = newData;
   }
adapter.notifyDataSetChanged();