2017-12-21 7 views
-1

私はfirebaseを使ってアンドロイドでチャットアプリを開発しなければなりません。グループを離脱して参加するさまざまなグループで構成されています。 2回目にリストビューをスクロールしたりビューを変更したりすると正しく表示されます。この問題を親切に修正し、以下のコードを見て問題を修正する必要があることを示してください。最初にquery1.addeventリスナーが呼び出されない

public class Allgroups extends AppCompatActivity { 
    private DatabaseReference mDatabaseRef; 
    private List<ImageUpload> imgList; 
    private List<groupuserstoken> imgList1; 
    ListView listView; 
    private ImageListAdapter adapter; 
    private DatabaseReference databaseReference; 
    ProgressDialog progressDialog; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_allgroups); 
     progressDialog = new ProgressDialog(this); 
     progressDialog.setMessage("Please wait loading groups..."); 

     listView=(ListView)findViewById(R.id.allgroups11); 
     mDatabaseRef = FirebaseDatabase.getInstance().getReference(); 
     imgList=new ArrayList<>(); 
     final Query query = mDatabaseRef.child("Groups"); 
     listView.smoothScrollByOffset(10); 
     query.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
        ImageUpload img = snapshot.getValue(ImageUpload.class); 
        imgList.add(img); 
       } 

       adapter = new ImageListAdapter(Allgroups.this, R.layout.custommenu, imgList); 
       adapter.notifyDataSetChanged(); 
       listView.setAdapter(adapter); 
      } 
      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       String name=imgList.get(i).getName(); 
       String path=imgList.get(i).getUrl(); 
       String topic=imgList.get(i).getTopic(); 
       Intent intent= new Intent(getApplicationContext(),Main4Activity.class); 
       intent.putExtra("name",name); 
       intent.putExtra("path",path); 
       intent.putExtra("topic",topic); 
       startActivity(intent); 
      } 
     }); 
    } 
} 




public class ImageListAdapter extends ArrayAdapter<ImageUpload> { 
     private Activity context; 
     private int resource; 
     private List<ImageUpload> listImage; 

     private DatabaseReference mDatabaseRef; 
     private List<groupuserstoken> imgList1; 
     ProgressDialog progressDialog; 
     int pos; 




     public ImageListAdapter(@NonNull Activity context, @LayoutRes int resource, @NonNull List<ImageUpload> objects) { 
      super(context, resource, objects); 
      this.context = context; 
      this.resource = resource; 
      listImage = objects; 
     } 


      TextView tvName; 
       TextView tvDes; 
      TextView statuss; 
      Button leave; 
      ImageView img; 





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

      View v = convertView; 

      if (v == null) { 
       LayoutInflater vi; 
       vi = LayoutInflater.from(getContext()); 
       v = vi.inflate(R.layout.custommenu, null); 
      } 
      // final LayoutInflater inflater = context.getLayoutInflater(); 
     // v = LayoutInflater.from(getContext()).inflate(R.layout.custommenu, parent, false); 

      ImageUpload listImage1 = getItem(position); 

      if (listImage1 !=null) { 


       tvName = (TextView) v.findViewById(R.id.as); 
       tvDes = (TextView) v.findViewById(R.id.aa); 
       statuss = (TextView) v.findViewById(R.id.users); 
       img = (ImageView) v.findViewById(R.id.addgroup1); 
       leave = (Button) v.findViewById(R.id.leavegroup); 

       mDatabaseRef = FirebaseDatabase.getInstance().getReference(); 
       final String name = listImage.get(pos).getName(); 
       final Query query1 = mDatabaseRef.child(name + "user"); 
       query1.addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 

         imgList1 = new ArrayList<>(); 
         for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
          groupuserstoken img = snapshot.getValue(groupuserstoken.class); 
          imgList1.add(img); 
         } 
         String token = FirebaseInstanceId.getInstance().getToken(); 
         if (!(imgList1.isEmpty())) { 

          if (!(imgList1.contains(token))) { 
           leave.setText("Leave Group"); 
          } 
         } 


        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 


        } 
       }); 

       tvName.setText(listImage1.getName()); 
       tvDes.setText(listImage1.getDescription()); 
       statuss.setText(listImage1.getMembers() + " Users "); 
       Glide.with(context).load(listImage1.getUrl()).into(img); 
      } 


      leave.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        String groupname = listImage.get(position).getName(); 
        mDatabaseRef = FirebaseDatabase.getInstance().getReference().child(groupname+"user").child(FirebaseInstanceId.getInstance().getToken()); 
        mDatabaseRef.child("token").setValue(FirebaseInstanceId.getInstance().getToken()); 
       } 
      }); 
      return v; 
     } 
    } 

答えて

0

アダプタにsetTag()getTag()を使用していますが、より良い練習のためRecyclerViewの代わりListViewを使用することですしてください。

+0

ありがとう.recylerview it works –

関連する問題