2017-10-27 7 views
0

내 응용 프로그램이 Firebase에서 데이터를 검색 한 다음 조각에 표시해야합니다. Firebase에는 데이터가 있지만 애플리케이션을 시작할 때이 비어 있습니다.하지만 버튼을 누르고 돌아 가면 애플리케이션이 데이터를 채우고 표시합니다.응용 프로그램 시작시 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 호출은 백그라운드에서 이루어지며 백그라운드 처리가 진행되는 동안 뷰 생성이 진행됩니다.

어댑터는 항목 목록을 사용하므로 빈 목록으로 자체를 만듭니다.

firebase 처리가 완료되면보기를 업데이트하는 것이 좋습니다. 위임자 패턴을 사용하여이 작업을 수행 할 수 있습니다. 행운

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

베팅