改变项目选择后Android中单个微调项目的背景颜色
问题描述:
我有一个ArrayAdapter
调用SpinnerAdapter
,因为它的布局需要android.R.layout.simple_spinner_item
。由于要显示的数据也需要ContactInfo
对象的ArrayList
。改变项目选择后Android中单个微调项目的背景颜色
然后我有一个Spinner
叫做selectionWheel
并且当做出“选择”时;它会从之前提到的ArrayList
中提取ContactInfo
对象,并将其添加到新的ArrayList
。
现在,当我第二次调出Spinner
;我想检查两个ArrayLists
之间的匹配项,如果有匹配项,通过更改它们的背景颜色来突出显示Spinner
中的相应项目。
以下是我已经尝试:
final Dialog dialog = new Dialog(getActivity());
dialog.setContentView(R.layout.generic_selection_wheel);
dialog.setTitle("Select a contact");
final ArrayAdapter<ContactInfo> contactSelectionAdapter = new ArrayAdapter<ContactInfo>(
getActivity().getBaseContext(),
android.R.layout.simple_spinner_item, globaldata
.getContactInfoList());
contactSelectionAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Button dialogButtonOK = (Button) dialog
.findViewById(R.id.dialogButtonOK);
final Spinner selectionWheel = (Spinner) dialog
.findViewById(R.id.genericselectionspinner);
selectionWheel.setAdapter(contactSelectionAdapter);
selectionWheel
.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent,
View view, int position, long id) {
// check to see if the contact has already been
// selected, if not add it. If it has do
// nothing.
View viewToChange = contactSelectionAdapter
.getView(position, new View(
getActivity()
.getBaseContext()),
parent);
if (!activeContactsArrayList
.contains(globaldata
.getContactInfoList().get(
position))) {
activeContactsArrayList
.add(globaldata
.getContactInfoList().get(
position));
viewToChange.setBackgroundColor(Color.GREEN);;
} else if (activeContactsArrayList
.contains(globaldata
.getContactInfoList().get(
position))) {
activeContactsArrayList.remove(position);
viewToChange.setBackgroundColor(Color.WHITE);;
}
selectContactsBtn
.setText(activeContactsArrayList.size()
+ " contacts selected");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
// if button is clicked, close the custom dialog
dialogButtonOK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
});
然而,这并不做其中我描述了预期的效果,而且我不确定哪里去从这里...
答
这里是我所做的
package com.example.click;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends Activity{
Spinner mySpinner;
ArrayList<String> check = new ArrayList<String>();
String[] myArray={"1","2","3","4","5"};
String[] newArray={};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mySpinner = (Spinner)findViewById(R.id.spinner1);
mySpinner.setAdapter(new MyAdapter(this,android.R.layout.simple_spinner_item, myArray));
mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
if(check.contains(myArray[arg2])){
check.remove(myArray[arg2]);
}
else{
check.add(myArray[arg2]);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public class MyAdapter extends ArrayAdapter<String>{
public MyAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
}
@Override
public View getDropDownView(int position, View cnvtView, ViewGroup prnt){
LayoutInflater inflater = getLayoutInflater();
View spinnerItem = inflater.inflate(android.R.layout.simple_spinner_item, null);
TextView mytext= (TextView)spinnerItem.findViewById(android.R.id.text1);
mytext.setText(myArray[position]);
if(check.contains(myArray[position])){
spinnerItem.setBackgroundColor(Color.GREEN);
}
return spinnerItem;
}
}
}