【发布时间】:2017-03-26 15:45:03
【问题描述】:
我正在开发一个考勤应用程序。该应用程序有ListActivity 由学生列表组成。我想将颜色更改为红色和绿色,表示不存在和存在。问题是如果我的学生名单比屏幕长。当前视图向下或向上的项目会失去颜色。我的方法正确吗?如何保存每个单独列表项的颜色。当然,如果除了使用ListView 之外还有其他最佳方法,我愿意接受建议。
这是包含列表的 ListActivity
public class ListActivity extends Activity implements Serializable{
private String userName;
private TextView nameTextView;
private ListView nameList;
private CustomAdapter adapter;
private boolean colorRed;
private Class myClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
myClass = new Class();
colorRed = false;
// Open the students list from file if exists
openFromFile();
nameList = (ListView) findViewById(R.id.nameListView);
nameTextView = (TextView) findViewById(R.id.nameTextView);
Bundle extras = getIntent().getExtras();
if (extras != null) {
userName = extras.getString("NAME");
nameTextView.setText("Hi! " + userName);
}
adapter = new CustomAdapter(this, myClass.getStudentNames());
nameList.setAdapter(adapter);
TextView tv = (TextView) findViewById(R.id.sNametv);
nameList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (colorRed == true) {
view.setBackgroundColor(ContextCompat.getColor(getBaseContext(), R.color.colorPresent));
colorRed = false;
} else {
view.setBackgroundColor(ContextCompat.getColor(getBaseContext(), R.color.colorAbsent));
colorRed = true;
}
// ALso could use this
// adapterView.getChildAt(position).setBackgroundColor(Color.RED);
}
});
}
我使用boolean colorRed 来检查颜色,因为我无法将视图颜色与colors xml 的颜色进行比较。
nameList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (colorRed == true) {
view.setBackgroundColor(ContextCompat.getColor(getBaseContext(), R.color.colorPresent));
colorRed = false;
} else {
view.setBackgroundColor(ContextCompat.getColor(getBaseContext(), R.color.colorAbsent));
colorRed = true;
}
}
});
ListView 的CustomAdapter 类
public class CustomAdapter extends ArrayAdapter<String> {
public CustomAdapter(Context context, ArrayList<String> names) {
super(context, R.layout.custom_layout, names);
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View customView = inflater.inflate(R.layout.custom_layout, parent, false);
String singleName = getItem(position);
TextView tv = (TextView) customView.findViewById(R.id.sNametv);
tv.setText(singleName);
return customView;
}
}
我已经仔细检查了这是一个独特的问题!放心……
提前致谢
【问题讨论】:
-
你使用的是POJO模型类?
-
请明确!
-
如果您将模型类用于列表项,那么您可以为每个项目创建另一个整数值并将其值设置为 1 或 0。然后在您的 getView 方法中检查该值并根据该值更改颜色。
-
好主意!但颜色变化不是永久性的。堆叠更多列表项后,颜色将丢失为默认的灰色。
-
您希望您的列表项永久使用另一种颜色?
标签: java android listview android-studio save