我制作了一个颜色列表,我想更改TextView
的文字颜色,其中包含ID"用户名"只要有人点击列表中的一个项目。我尝试了下面的代码,但它不起作用。我无法弄清楚以下代码中的错误:
public class UserInformation extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_information);
Bundle app = getIntent().getExtras();
if (app == null) {
return;
}
final TextView Name = (TextView) findViewById(R.id.NameOfUser);//refernce to textview
Name.setText(app.getString("user_information"));
String[] color = {"Blue", "Red", "Green"};
ListAdapter mylist = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, color);
ListView renuList = (ListView) findViewById(R.id.Mylist);
renuList.setAdapter(mylist);
renuList.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String item = String.valueOf(adapterView.getItemIdAtPosition(i));
if (item == "Green") {
Name.setTextColor(Color.GREEN);// suppose I want to set the color to green if green is selected
}
}
}
);
}
答案 0 :(得分:1)
问题1:
好像你在调用getItemIdAtPosition()
而不是getItemAtPosition()
。
假设您希望从适配器获取给定位置的数据,您应该更改以下内容:
String item = String.valueOf(adapterView.getItemIdAtPosition(i));
要:
String item = (String) adapterView.getItemAtPosition(i);
问题2:
另一个问题是你将你的(假设的)字符串与==
运算符进行比较。
==
运算符在比较对象(String
是Object
)时检查引用相等性,并且您需要在此处检查值相等。
而不是:
if (item == "Green") {
您可能想要这样做:
if ("Green".equals(item)) {
来自String.equals()
的文档:
boolean equals (Object anObject)
将此字符串与指定的字符串进行比较 宾语。当且仅当参数不为null时,结果才为真 是一个String对象,表示与之相同的字符序列 这个对象。
在String
平等时查看this answer。