Я знаю, что этот вопрос уже задан, но я не нашел правильного решения, чтобы решить проблему с 0 позициями.Я работаю над Gridview и создал один адаптер (ButtonAdapter) для этого.поэтому у меня есть 4 кнопки, и если я нажму любую из них, то выбранная кнопка изменит цвет bg, а оставшиеся у всех трех кнопок должна быть уменьшена непрозрачность, скажем, 0,3, но моя проблема в том, что моя первая кнопка не меняет альфа.Так в чем же проблема?
пакетный адаптер;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import com.appsee.Appsee;
import com.regiumconsulting.donationssumup.MainActivity;
import com.regiumconsulting.donationssumup.R;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
public class ButtonAdapter extends BaseAdapter {
private Context context;
private final String[] mobileValues;
private BigDecimal amnt;
private Button[] chosenone = new Button[1];
private Button[] tempBtn = null;
private BigDecimal amount;
private Map<Button, BigDecimal> buttons = new HashMap<>();
public ButtonAdapter(Context context, String[] mobileValues) {
this.context = context;
this.mobileValues = mobileValues;
tempBtn = new Button[mobileValues.length];
}
public View getView(final int position, View convertView, ViewGroup parent) {
View gridView = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
gridView = new View(context);
// get layout from item_adaptor.xmlor.xml
gridView = inflater.inflate(R.layout.item_adaptor, null);
} else {
gridView = convertView;
}
// set image based on selected text
final Button btnView = (Button) gridView
.findViewById(R.id.grid_item_image);
setBtnAmnt(position, btnView);
btnView.setBackgroundResource(R.drawable.button_bg_dashed_border);
tempBtn[position] = btnView;
btnView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < tempBtn.length; i++) {//set alpha to 0.5 for all buttons
tempBtn[i].setAlpha(0.3f);//updating only three buttons bg not for 1st one.
}
chosenone[0] = btnView;
amount = buttons.get(chosenone[0]);
chosenone[0].setBackgroundResource(R.drawable.button_bg_border);//set alpha 1 to selected one and set selected color
chosenone[0].setAlpha(1f);
}
}
});
return gridView;
}
@Override
public int getCount() {
return mobileValues.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
private void setBtnAmnt(int position, Button imageView) {
amnt = new BigDecimal(mobileValues[position]);
imageView.setText(String.format("£ %s", amnt.toString()));
buttons.put(imageView, amnt);
}
}
Also, I have created on method inside main activity let say screenClick.
public void screenClick() {
gridView.setAdapter(adaptor);
adaptor.notifyDataSetChanged();
}
So If I call this method and then perform the same operation as mentioned above then only it will work and it will set 0.3 alpha for a 1st button. So what is the issue I don't understand?
I have also attached a screenshot link where a 1st button doesn't have reduced opacity.
https://imgur.com/a/bofGMk4