Я занимаюсь разработкой приложения, в котором вы можете публиковать изображения крутых автомобилей, которые видите.Пользователь должен выбрать производителя и модель для изображения из AutoCompleteTextView.ArrayAdapters для AutoCompleteTextViews получают из Firebase с циклом for.У меня есть изображение рядом с обоими полями ввода, которое должно отображать зеленую галочку, если записанная строка найдена из массива производителей или моделей.Таким образом, пользователь должен выбрать строку из предложений автозаполнения.По умолчанию изображение красного восклицательного знака.Вот как выглядит приложение:
должны поменяться изображения с красным кружком
У меня есть код, который должен работать, но он действует довольно странно.Изображение не меняется с первой попытки, но если я войду и удалю, например, производителя, несколько раз, изображение изменится.Это совсем не согласованно.Вот мой код для этой части:
//SETTING UP THE MANUFACTURER AUTOCOMPLETE TEXT VIEW FROM DATABASE
carReference.child("Manufacturers").addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
autoCompleteManufacts.clear();
for (DataSnapshot manufactSuggestionSnapshot : dataSnapshot.getChildren())
{
String manufact = manufactSuggestionSnapshot.child("Manufact").getValue(String.class);
autoCompleteManufacts.add(manufact);
}
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
manufactAutoET.setAdapter(autoCompleteManufacts);
monitorManufacts();
}
//CHANGE MANUFACTURER CHECK MARK
private void changeManufactCheckMark()
{
manufactCheckIW.setVisibility(View.VISIBLE);
for(int i = 0; i < autoCompleteManufacts.getCount(); i++)
{
String carMaker = autoCompleteManufacts.getItem(i).toString();
if(manufactAutoET.getText().toString().equals(carMaker))
{
manufacturerReady = true;
manufactCheckIW.setImageResource(R.drawable.check);
manufactCheckIW.setColorFilter(Color.rgb(109, 213, 79));
setAdapterForModelInput(manufactAutoET.getText().toString());
}
else if(!manufactAutoET.getText().toString().equals(carMaker))
{
manufacturerReady = false;
manufactCheckIW.setImageResource(R.drawable.error);
manufactCheckIW.setColorFilter(Color.rgb(213, 79, 79));
}
}
}
//SET THE MODEL EDIT TEXT ADAPTER ACCORDING TO THE MANUFACTURER
private void setAdapterForModelInput(String activeManufact)
{
Toast.makeText(this, activeManufact, Toast.LENGTH_SHORT).show();
carReference.child("Manufacturers").child(activeManufact).addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
autoCompleteModels.clear();
for (DataSnapshot modelSuggestionSnapshot : dataSnapshot.getChildren())
{
if(modelSuggestionSnapshot.hasChild("Model"))
{
String model = modelSuggestionSnapshot.child("Model").getValue(String.class);
autoCompleteModels.add(model);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
modelAutoET.setAdapter(autoCompleteModels);
monitorModels();
}
//CHANGE MODEL CHECK MARK
private void changeModelCheckMark()
{
modelCheckIW.setVisibility(View.VISIBLE);
for(int i = 0; i < autoCompleteModels.getCount(); i++)
{
String carModel = autoCompleteModels.getItem(i).toString();
if(modelAutoET.getText().toString().equals(carModel))
{
modelReady = true;
modelCheckIW.setImageResource(R.drawable.check);
modelCheckIW.setColorFilter(Color.rgb(109, 213, 79));
}
else if(!modelAutoET.getText().toString().equals(carModel))
{
modelReady = false;
modelCheckIW.setImageResource(R.drawable.error);
modelCheckIW.setColorFilter(Color.rgb(213, 79, 79));
}
}
}
//MONITOR MANUFACT INPUT
private void monitorManufacts()
{
manufactAutoET.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
changeManufactCheckMark();
modelAutoET.setText("");
modelCheckIW.setVisibility(View.INVISIBLE);
}
@Override
public void afterTextChanged(Editable s)
{
}
});
}
//MONITOR MODEL INPUT
private void monitorModels()
{
modelAutoET.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
changeModelCheckMark();
}
@Override
public void afterTextChanged(Editable s)
{
}
});
}
Есть идеи, почему это не работает?Спасибо вам большое!:)