Java 如何在BaseAdapter中仅更改一个特定按钮的颜色?
我有一个问题,即在我的BaseAdapter中,我尝试只为我在其中找到的特定字母更改按钮的颜色,但当我尝试这样做时,颜色会更改系统中的所有按钮,我能做什么 更具体地说,在MainActivity类中,我有两个列表: userAnswer和newList。在onCreate()中创建类时,我将某些字母a、B、C等添加到userAnswer中。在选择buttonAddLetter之后,我想向userAnswer添加下一个字母,只是我想让这些新字母的颜色变为另一个,而不是与其他字母的颜色相同。一切正常,但问题是所有字母都会变为不同的颜色,尽管在BaseAdapter中,我会检查数据是否来自newList,如果是,请更改颜色。我做错了什么?为什么所有按钮的颜色都在变化 谢谢你的帮助 GridViewAnswerAdapter.classJava 如何在BaseAdapter中仅更改一个特定按钮的颜色?,java,android,adapter,android-button,baseadapter,Java,Android,Adapter,Android Button,Baseadapter,我有一个问题,即在我的BaseAdapter中,我尝试只为我在其中找到的特定字母更改按钮的颜色,但当我尝试这样做时,颜色会更改系统中的所有按钮,我能做什么 更具体地说,在MainActivity类中,我有两个列表: userAnswer和newList。在onCreate()中创建类时,我将某些字母a、B、C等添加到userAnswer中。在选择buttonAddLetter之后,我想向userAnswer添加下一个字母,只是我想让这些新字母的颜色变为另一个,而不是与其他字母的颜色相同。一切正常
public class GridViewAnswerAdapter extends BaseAdapter {
private List<String> answer;
private Context context;
private MainActivity mainActivity;
public GridViewAnswerAdapter(List<String> answer, Context context, MainActivity mainActivity) {
this.answer = answer;
this.context = context;
this.mainActivity = mainActivity;
}
@Override
public int getCount() {
return answer.size();
}
@Override
public Object getItem(int position) {
return answer.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Button buttonAnswerAdapter = null;
if (convertView == null) {
if (answer.get(position).equals(" ")) {
buttonAnswerAdapter = new Button(context);
buttonAnswerAdapter.setLayoutParams(new GridView.LayoutParams(100, 100));
buttonAnswerAdapter.setPadding(8, 8, 8, 8);
buttonAnswerAdapter.setBackgroundColor(Color.BLUE);
}
//I want to change color button only where newList add some new letter, //everything is ok, but it's change every button colors, why?
else if(mainActivity.newList.size() != 0){
if (mainActivity.newList.get(position).equals(answer.get(position))) {
buttonAnswerAdapter = new Button(context);
buttonAnswerAdapter.setLayoutParams(new GridView.LayoutParams(100, 100));
buttonAnswerAdapter.setPadding(8, 8, 8, 8);
buttonAnswerAdapter.setBackgroundColor(Color.BLACK);
buttonAnswerAdapter.setTextColor(Color.RED);
buttonAnswerAdapter.setText(String.valueOf(mainActivity.newList.get(position)));
}
}
else if(mainActivity.userAnswer.get(position).equals(answer.get(position))) {
//Create new button
buttonAnswerAdapter = new Button(context);
buttonAnswerAdapter.setLayoutParams(new GridView.LayoutParams(100, 100));
buttonAnswerAdapter.setPadding(8, 8, 8, 8);
buttonAnswerAdapter.setBackgroundColor(Color.BLUE);
buttonAnswerAdapter.setTextColor(Color.GREEN);
buttonAnswerAdapter.setText(String.valueOf(answer.get(position)));
}
else
{
Toast.makeText(context, "Something is wrong!", Toast.LENGTH_SHORT).show();
}
}
else {
buttonAnswerAdapter = (Button) convertView;
}
return buttonAnswerAdapter;
}
public class MainActivity extends AppCompatActivity {
List<String> userAnswer = new ArrayList<>();
List<String> newList = new ArrayList<>();
GridViewAnswerAdapter gridViewAnswerAdapter;
GridView gridViewAnswer;
Button buttonAddLetter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridViewAnswer = findViewById(R.id.gridViewAnswer);
buttonAddLetter = findViewById(R.id.buttonWskazówka);
buttonAddLetter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addMore();
}
});
userAnswer.add(0, "A");
userAnswer.add(1, "B");
userAnswer.add(2, "C");
userAnswer.add(3, "D");
userAnswer.add(4, "E");
userAnswer.add(5, "F");
userAnswer.add(6, "G");
gridViewAnswerAdapter = new GridViewAnswerAdapter(userAnswer, getApplicationContext(), MainActivity.this);
gridViewAnswer.setAdapter(gridViewAnswerAdapter);
gridViewAnswerAdapter.notifyDataSetChanged();
}
private void addMore()
{
newList.clear();
newList.addAll(userAnswer);
newList.set(0, "A");
newList.set(1, "B");
newList.set(2, "C");
gridViewAnswerAdapter = new GridViewAnswerAdapter(userAnswer, getApplicationContext(), MainActivity.this);
gridViewAnswer.setAdapter(gridViewAnswerAdapter);
gridViewAnswerAdapter.notifyDataSetChanged();
}
公共类GridViewAnswerAdapter扩展了BaseAdapter{
私人列表答案;
私人语境;
私人活动;
公共GridViewAnswerAdapter(列表答案、上下文上下文、MainActivity MainActivity){
这个答案=答案;
this.context=上下文;
this.mainActivity=mainActivity;
}
@凌驾
public int getCount(){
返回答案。size();
}
@凌驾
公共对象getItem(int位置){
返回答案。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
按钮适配器=空;
if(convertView==null){
if(answer.get(position).equals(“”){
buttonAnswerAdapter=新按钮(上下文);
buttonAnswerAdapter.setLayoutParams(新的GridView.LayoutParams(100100));
设置填充(8,8,8,8);
按钮。设置背景颜色(颜色。蓝色);
}
//我只想在newList添加一些新字母的地方更改按钮的颜色,//一切正常,但更改每个按钮的颜色,为什么?
else if(mainActivity.newList.size()!=0){
if(mainActivity.newList.get(position).equals(answer.get(position))){
buttonAnswerAdapter=新按钮(上下文);
buttonAnswerAdapter.setLayoutParams(新的GridView.LayoutParams(100100));
设置填充(8,8,8,8);
按钮。设置背景颜色(颜色。黑色);
buttonAnswerAdapter.setTextColor(颜色:红色);
buttonAnswerAdapter.setText(String.valueOf(mainActivity.newList.get(position));
}
}
else if(mainActivity.userAnswer.get(position).equals(answer.get(position))){
//创建新按钮
buttonAnswerAdapter=新按钮(上下文);
buttonAnswerAdapter.setLayoutParams(新的GridView.LayoutParams(100100));
设置填充(8,8,8,8);
按钮。设置背景颜色(颜色。蓝色);
ButtonSwerAdapter.setTextColor(Color.GREEN);
buttonAnswerAdapter.setText(String.valueOf(answer.get(position));
}
其他的
{
Toast.makeText(上下文,“有什么不对劲!”,Toast.LENGTH_SHORT.show();
}
}
否则{
ButtonSwerAdapter=(按钮)convertView;
}
返回按钮和适配器;
}
}
MainActivity.class
public class GridViewAnswerAdapter extends BaseAdapter {
private List<String> answer;
private Context context;
private MainActivity mainActivity;
public GridViewAnswerAdapter(List<String> answer, Context context, MainActivity mainActivity) {
this.answer = answer;
this.context = context;
this.mainActivity = mainActivity;
}
@Override
public int getCount() {
return answer.size();
}
@Override
public Object getItem(int position) {
return answer.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Button buttonAnswerAdapter = null;
if (convertView == null) {
if (answer.get(position).equals(" ")) {
buttonAnswerAdapter = new Button(context);
buttonAnswerAdapter.setLayoutParams(new GridView.LayoutParams(100, 100));
buttonAnswerAdapter.setPadding(8, 8, 8, 8);
buttonAnswerAdapter.setBackgroundColor(Color.BLUE);
}
//I want to change color button only where newList add some new letter, //everything is ok, but it's change every button colors, why?
else if(mainActivity.newList.size() != 0){
if (mainActivity.newList.get(position).equals(answer.get(position))) {
buttonAnswerAdapter = new Button(context);
buttonAnswerAdapter.setLayoutParams(new GridView.LayoutParams(100, 100));
buttonAnswerAdapter.setPadding(8, 8, 8, 8);
buttonAnswerAdapter.setBackgroundColor(Color.BLACK);
buttonAnswerAdapter.setTextColor(Color.RED);
buttonAnswerAdapter.setText(String.valueOf(mainActivity.newList.get(position)));
}
}
else if(mainActivity.userAnswer.get(position).equals(answer.get(position))) {
//Create new button
buttonAnswerAdapter = new Button(context);
buttonAnswerAdapter.setLayoutParams(new GridView.LayoutParams(100, 100));
buttonAnswerAdapter.setPadding(8, 8, 8, 8);
buttonAnswerAdapter.setBackgroundColor(Color.BLUE);
buttonAnswerAdapter.setTextColor(Color.GREEN);
buttonAnswerAdapter.setText(String.valueOf(answer.get(position)));
}
else
{
Toast.makeText(context, "Something is wrong!", Toast.LENGTH_SHORT).show();
}
}
else {
buttonAnswerAdapter = (Button) convertView;
}
return buttonAnswerAdapter;
}
public class MainActivity extends AppCompatActivity {
List<String> userAnswer = new ArrayList<>();
List<String> newList = new ArrayList<>();
GridViewAnswerAdapter gridViewAnswerAdapter;
GridView gridViewAnswer;
Button buttonAddLetter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridViewAnswer = findViewById(R.id.gridViewAnswer);
buttonAddLetter = findViewById(R.id.buttonWskazówka);
buttonAddLetter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addMore();
}
});
userAnswer.add(0, "A");
userAnswer.add(1, "B");
userAnswer.add(2, "C");
userAnswer.add(3, "D");
userAnswer.add(4, "E");
userAnswer.add(5, "F");
userAnswer.add(6, "G");
gridViewAnswerAdapter = new GridViewAnswerAdapter(userAnswer, getApplicationContext(), MainActivity.this);
gridViewAnswer.setAdapter(gridViewAnswerAdapter);
gridViewAnswerAdapter.notifyDataSetChanged();
}
private void addMore()
{
newList.clear();
newList.addAll(userAnswer);
newList.set(0, "A");
newList.set(1, "B");
newList.set(2, "C");
gridViewAnswerAdapter = new GridViewAnswerAdapter(userAnswer, getApplicationContext(), MainActivity.this);
gridViewAnswer.setAdapter(gridViewAnswerAdapter);
gridViewAnswerAdapter.notifyDataSetChanged();
}
public类MainActivity扩展了AppCompatActivity{
List userAnswer=new ArrayList();
List newList=newarraylist();
GridViewAnswerAdapter GridViewAnswerAdapter;
GridView gridViewAnswer;
按钮按钮;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridViewAnswer=findViewById(R.id.gridViewAnswer);
buttonAddLetter=findViewById(R.id.buttonWskazówka);
buttonAddLetter.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
addMore();
}
});
添加(0,“A”);
用户应答。添加(1,“B”);
添加(2,“C”);
添加(3,“D”);
添加(4,“E”);
用户应答。添加(5,“F”);
添加(6,“G”);
gridViewAnswerAdapter=新的gridViewAnswerAdapter(userAnswer,getApplicationContext(),MainActivity.this);
setAdapter(gridViewAnswerAdapter);
gridViewAnswerAdapter.notifyDataSetChanged();
}
私有void addMore()
{
newList.clear();
addAll(userAnswer);
newList.set(0,“A”);
新列表。集合(1,“B”);
新列表。集合(2,“C”);
gridViewAnswerAdapter=新的gridViewAnswerAdapter(userAnswer,getApplicationContext(),MainActivity.this);
setAdapter(gridViewAnswerAdapter);
gridViewAnswerAdapter.notifyDataSetChanged();
}
}
我添加图片是因为我不知道如何充分解释我想要实现的目标:
在第一张图片上,我有一个带有6个按钮的列表视图,在第二张图片上,我们有一个列表(新列表,它在索引上添加了0,1,2-a,B,C),按钮只有不同的颜色。问题是,我想从第三张图片中获得结果,即当我按下袜子时,我希望新添加的字母具有完全不同的颜色,并且那些已经是原来颜色的字母具有完全不同的颜色
我很难理解你想要的结果。如果要在初始化后更改按钮颜色,请直接存储对按钮适配器或按钮的引用。这样,您就可以在运行时访问它,并将其更改为您想要的任何内容 更改
适配器
构造函数,并将列表
新列表直接传递给适配器
。这不是一个好主意
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Button buttonAnswerAdapter = null;
if (convertView == null) {
buttonAnswerAdapter = new Button(context);
buttonAnswerAdapter.setLayoutParams(new GridView.LayoutParams(100, 100));
buttonAnswerAdapter.setPadding(8, 8, 8, 8);
buttonAnswerAdapter.setBackgroundColor(Color.BLUE);
buttonAnswerAdapter.setTextColor(Color.GREEN);
buttonAnswerAdapter.setText(answer.get(position));
}else{
buttonAnswerAdapter = (Button) convertView;
}
if(newList.size() != 0){
if (newList.get(position).equals(answer.get(position))) {
buttonAnswerAdapter.setBackgroundColor(Color.BLACK);
buttonAnswerAdapter.setTextColor(Color.RED);
}
}
return buttonAnswerAdapter;
}
gridViewAnswerAdapter = new GridViewAnswerAdapter(userAnswer, getApplicationContext(), MainActivity.this);
gridViewAnswer.setAdapter(gridViewAnswerAdapter);