问题描述
我有一个 Activity 问题,它向我展示了一个带有自定义适配器的简单列表视图。我每次都为活动充值以从 Firebase 数据库获取数据,第一次打开活动时这是空的。我是 Android Studio 的菜鸟,所以请不要杀了我。
这是我的自定义适配器:
public class SpesaAdapter2 extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private String[] array_oggetto;
private int[] array_quantita;
private String[] array_id;
private FirebaseFirestore db;
public SpesaAdapter2(@NonNull Context c,String[] array_oggetto,int[] array_quantita,String[] array_id){
context = c;
this.array_oggetto = array_oggetto;
this.array_quantita = array_quantita;
this.array_id = array_id;
db = FirebaseFirestore.getInstance();
}
@Override
public int getCount() {
return array_oggetto.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@NonNull
@Override
public View getView(int position,@Nullable View convertView,@NonNull ViewGroup parent) {
if(inflater == null){
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
if(convertView == null){
convertView = inflater.inflate(R.layout.list_layout,null);
}
TextView oggetto = convertView.findViewById(R.id.oggetto);
TextView quantita = convertView.findViewById(R.id.quantità);
Button delete = convertView.findViewById(R.id.delete);
ImageView img = convertView.findViewById(R.id.img);
oggetto.setText(array_oggetto[position]);
quantita.setText(String.valueOf(array_quantita[position]));
delete.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(context,String.valueOf(position +"," + array_id[position]),Toast.LENGTH_SHORT).show();
if (array_id[position] != null) {
buttonRemoveFromDB(position);
} else {
Toast.makeText(context,"IMPOSSIBILE ELIMINARE",Toast.LENGTH_SHORT).show();
}
}
});
return convertView;
}
public void buttonRemoveFromDB(int position){
db.collection("Spesa").document(array_id[position]).delete().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful() || array_id[position] != null){
Toast.makeText(context,"ELIMINAZIONE COMPLETATA",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context,Toast.LENGTH_SHORT).show();
}
}
});
}
}
这是我的活动:
public class list_activity extends AppCompatActivity {
private ListView listView;
private SpesaAdapter2 spesaAdapter2;
private FirebaseFirestore db;
private Dialog dialog;
private Spesa spesa;
private static String[] array_oggetto = {};
private static int[] array_quantita = {};
private static String[] array_id = {};
private List<String> list_oggetto;
private List<Integer> list_quantità;
private List<String> list_id;
private List<Spesa> list_spesa;
private DatabaseReference databasereference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
UI();
readFromDB2();
FloatingActionButton fab = findViewById(R.id.fab);
fab.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
show_Allert_Dialog();
}
});
}
@Override
protected void onStart() {
super.onStart();
spesaAdapter2 = new SpesaAdapter2(list_activity.this,array_oggetto,array_quantita,array_id);
spesaAdapter2.notifyDataSetChanged();
listView.setAdapter(spesaAdapter2);
}
@Override
protected void onResume() {
super.onResume();
}
private void UI(){
array_oggetto = new String[15];
array_quantita = new int[15];
array_id = new String[15];
db = FirebaseFirestore.getInstance();
Button delete = findViewById(R.id.delete);
listView = findViewById(R.id.list_view);
}
private void save_To_DB(String oggetto,String quantita,int photo_id){
HashMap<String,Object> spesa = new HashMap<>();
spesa.put("Oggetto",oggetto);
spesa.put("Quantità",quantita);
spesa.put("Photo",String.valueOf(R.drawable.home_black_18dp));
db.collection("Spesa").document().set(spesa);
dialog.dismiss();
}
private void show_Allert_Dialog(){
dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_spesa);
EditText oggetto = dialog.findViewById(R.id.spesa_edit_text_oggetto);
EditText quantita = dialog.findViewById(R.id.spesa_edit_text_quantita);
Button positive = dialog.findViewById(R.id.dialog_button_aggiungi);
Button negative = dialog.findViewById(R.id.dialog_button_annulla);
positive.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(oggetto.getText().toString().isEmpty() || quantita.getText().toString().isEmpty()) {
Toast.makeText(list_activity.this,"Inserisci dati",Toast.LENGTH_SHORT).show();
}
else {
Spesa spesa = new Spesa(oggetto.getText().toString(),Integer.parseInt(quantita.getText().toString()),String.valueOf(R.drawable.ic_baseline_home_24),null);
save_To_DB(oggetto.getText().toString(),quantita.getText().toString(),R.drawable.home_black_18dp);
readFromDB2();
}
}
});
negative.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
private void readFromDB2(){
db.collection("Spesa").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot value,@Nullable FirebaseFirestoreException error) {
int i = 0;
for (DocumentSnapshot snapshot : value){
array_oggetto[i] = snapshot.getString("Oggetto");
array_quantita[i]= Integer.parseInt(snapshot.getString("Quantità"));
array_id[i] = snapshot.getId();
Log.d("list_activity",array_oggetto[i]);
i++;
}
}
});
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)