当我有一个简单的ListView并且我想通过点击它来改变显示项目字符串的TextBox的颜色时,我使用以下代码:
public class ListViewActivity extends Activity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
ArrayList<String> list=new ArrayList<String>();
for (int i = 0; i < 100; i++) {
list.add(String.valueOf(i));
}
listView=(ListView) findViewById(R.id.listView1);
CustomArrayAdapter adapter=new CustomArrayAdapter(this,R.layout.listview_row,R.id.listviewRow,list);
listView.setAdapter(adapter);
}
class CustomArrayAdapter extends ArrayAdapter<String>{
public CustomArrayAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull List<String> objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=super.getView(position,convertView,parent);
ViewGroup vg=(ViewGroup) view;
TextView txtView=(TextView) vg.getChildAt(0);
if (!txtView.hasOnClickListeners()){
txtView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView t=(TextView) v;
t.setTextColor(0xffbababa);
t.invalidate();
}
});
}
return view;
}
}
}
和布局文件:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="gr.spunitrade.development.spda.ListViewActivity">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView1">
</ListView>
和
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:id="@+id/listviewRow"
/>
</LinearLayout>
当点击项目时,可以看到通过向下滚动ListView,更多项目在没有点击的情况下显示为灰色。即使在listView.setOnItemClickListener
替代实现上执行灰化,也会发生相同的行为。
我无法理解为什么会这样。 OnClick
事件的断点只被命中一次。
答案 0 :(得分:1)
我会这样做。
假设您想根据点击切换颜色。
保留一组包含数据源大小的布尔值。
初始化为false。
单击时设置为true并设置颜色。然后在创建视图中根据布尔值设置颜色。