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