2017-10-27 10 views
0

私のアプリケーションがFirebaseからデータを取得して、それをフラグメントに表示する必要があります。 Firebaseにはデータがありますが、私のアプリケーションを起動すると、このRemaisは空ですが、ボタンを押して元に戻ったときに、アプリケーションがデータを入力して表示します。アプリケーションの起動時にCustomAdapterが空になりました

主な活動は、データのために、断片を使用し、私はArrayListの

でカスタムアダプターを使用するこれは、これはコード

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; 
}} 

断片で試料video

あります

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; } 

答えて

0

これはおそらく非同期呼び出しによるものです。 firebaseの呼び出しはすべてバックグラウンドで行われ、バックグラウンド処理が進行中の間はビューの作成が続けられます。

アダプタはアイテムのリストに依存しているため、空のリストを使用してアダプタを作成します。

これを行うには、ファイヤーベース処理が完了した後にビューを更新するのが良い方法です。これは代理人のパターンを使って行うことができます。運

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

ベット

関連する問題