首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >应用启动时CustomAdapter为空

应用启动时CustomAdapter为空
EN

Stack Overflow用户
提问于 2017-10-28 01:47:38
回答 1查看 109关注 0票数 0

我的应用程序从Firebase中检索数据,然后将其显示在片段中。在Firebase中有一个数据,但当我启动我的应用程序时,它是空的,但当我按下一个按钮并返回时,应用程序会填充并显示数据的正确性。

主要活动使用片段,对于数据,我使用带有arraylist的自定义适配器

这是一个示例video

这是代码

代码语言:javascript
代码运行次数:0
运行
复制
class CustomAdapter extends BaseAdapter {

private Context c;
private ArrayList<Item> items;


 CustomAdapter(Context c, ArrayList<Item> items) {
    super();
    this.c = c;
    this.items = items;
    Log.e("Hee",items.size()+"");
}

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

@Override
public Object getItem(int position) {
    return items.get(position);
}

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

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

    LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if(convertView==null)
    {
        convertView= inflater.inflate(R.layout.model,parent,false);
    }
    final TextView titleTxt= (TextView) convertView.findViewById(R.id.titleTxt);
    TextView priceTxt= (TextView) convertView.findViewById(R.id.priceTxt);
    TextView descTxt= (TextView) convertView.findViewById(R.id.descTxt);
    ImageView image = (ImageView) convertView.findViewById(imageView);

    final Item s = (Item) this.getItem(position);

    titleTxt.setText(s.getSale());
    priceTxt.setText(s.getPrice()+"€");
    descTxt.setText(s.getDescription());
    String url = s.getUrl();

    if(url != null){
        Glide.with(c).load(url).into(image);
    }else{
        Glide.with(c).load("http://www.video-furn.com/images/icons/AVFI-Image-not-available-icon.jpg").into(image);
    }

    //ONITECLICK
    convertView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String title = "Select option";
            CharSequence [] itemlist = {"Chiama", "Nuovo messaggio",};

            AlertDialog.Builder builder = new AlertDialog.Builder(c);
            builder.setTitle(title);
            builder.setItems(itemlist, new DialogInterface.OnClickListener(){

                @Override
                public void onClick(DialogInterface dialog, int witch) {
                    switch(witch){
                        case 0:
                            Intent phone_intent = new Intent(Intent.ACTION_DIAL);
                            phone_intent.setData(Uri.parse("tel:"+s.getPhone()));
                            c.startActivity(phone_intent);
                            break;

                        case 1:
                            Intent send_intent = new Intent(Intent.ACTION_VIEW);
                            send_intent.setData(Uri.parse("sms:"+s.getPhone()));
                            c.startActivity(send_intent);
                            break;


                        default:
                            break;
                    }

                }
            });

            AlertDialog alert = builder.create();
            alert.setCancelable(true);
            alert.show();

        }
    });

    return convertView;
}}

片段:

代码语言:javascript
代码运行次数:0
运行
复制
public class MainActivity_Fragment extends Fragment {

private DatabaseReference mDatabase;
private FirebaseHelper helper;
private ListView listView;
private CustomAdapter adapter;
private View view;
private Snackbar snackbar;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    mDatabase = FirebaseDatabase.getInstance().getReference();
    helper = new FirebaseHelper(mDatabase);

    view = inflater.inflate(R.layout.activity_main_fragment, container, false);
    adapter = new CustomAdapter(getActivity(), helper.retrieve());

    FloatingActionButton fabButton = (FloatingActionButton) view.findViewById(R.id.fabButton);

    listView = (ListView) view.findViewById(R.id.listview);

    listView.setAdapter(adapter);
    listView.setVisibility(View.VISIBLE);

    connectionState();

    fabButton.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
         addItem();
        }
    });

    Log.e("list adapter--",""+adapter.getCount());

    return view; }
EN

回答 1

Stack Overflow用户

发布于 2017-10-28 01:53:39

这可能是由于异步呼叫造成的。所有的firebase调用都是在后台进行的,当后台处理仍在进行时,您的视图创建将继续进行。

由于您的适配器依赖于项的列表,因此它会使用一个空列表创建自身。

实现这一点的一个好方法是在firebase处理完成后更新视图。这可以使用委托模式来完成。

https://www.tutorialspoint.com/design_pattern/business_delegate_pattern.htm

运气的赌注

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46980800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档