Android ListView 如何在未选中时更新视图
Android ListView how to update the view on unselected
我有一个 ListView,我想在其中将所选行更改为不同的颜色,但在未选中时将其重置为原始颜色。我使用 onItemSelectedListener 设置颜色,效果很好,但是取消选中后如何重置颜色?
谢谢。
创建侦听器接口:
public interface ListListener {
void clickListItem(int position);
}
这是模型 class:
public class Route {
String studentName;
boolean colorRed;
public Route(String studentName, boolean colorRed) {
this.studentName=studentName;
this.colorRed=colorRed;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public boolean isColorRed() {
return colorRed;
}
public void setColorRed(boolean colorRed) {
this.colorRed = colorRed;
}
}
创建适配器class:
public class AAdapter extends BaseAdapter implements View.OnClickListener {
Context context;
private List<Route> routes;
Holder holder;
private static LayoutInflater inflater=null;
ListListener listListener;
public AAdapter(Context context, List<Route> names,ListListener listListener) {
this.routes=names;
this.context=context;
this.listListener=listListener;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public void onClick(View view) {
listListener.clickListItem((Integer)view.getTag());
}
private class Holder
{
TextView tv;
}
@Override
public Route getItem(int position) {
return routes.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getCount() {
return routes.size();
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
holder=new Holder();
convertView=inflater.inflate(R.layout.custom_layout,null);
holder.tv=(TextView)convertView.findViewById(R.id.textView);
holder.tv.setOnClickListener(this);
convertView.setTag(holder);
}else {
holder=(Holder)convertView.getTag();
}
holder.tv.setText(routes.get(position).getStudentName());
holder.tv.setTag(position);
if (!routes.get(position).colorRed){
holder.tv.setBackgroundColor(Color.GREEN);
}else {
holder.tv.setBackgroundColor(Color.RED);
}
return convertView;
}
}
现在 MainActivity Class:
public class MainActivity extends AppCompatActivity implements ListListener{
AAdapter adapter;
ListView lv;
List<Route> myNames;
ListListener listListener=MainActivity.this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listnames);
myNames=new ArrayList<>();
/* DEMO DATA U NEED TO FETCH YOUR DATA */
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
adapter = new AAdapter(this, myNames,listListener);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void clickListItem(int position) {
if(myNames.get(position).colorRed){
myNames.get(position).colorRed=false;
}else {
myNames.get(position).colorRed=true;
}
adapter.notifyDataSetChanged();
}
}
public class路线{
boolean colorRed;
public Route(String studentName, boolean colorRed) {
this.colorRed=colorRed;
}
public boolean isColorRed() {
return colorRed;
}
public void setColorRed(boolean colorRed) {
this.colorRed = colorRed;
}
}
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
if(listitem.get(position).isColorRed){
listitem.get(position).setColorRed=false;
}else{
listitem.get(position).setColorRed=true;
}
youradapter.notifyDataSetChanged();
}
}
@NonNull
@覆盖
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
holder=new Holder();
convertView=inflater.inflate(R.layout.custom_layout,null);
holder.tv=(TextView)convertView.findViewById(R.id.textView);
holder.tv.setOnClickListener(this);
convertView.setTag(holder);
}else {
holder=(Holder)convertView.getTag();
}
holder.tv.setText(routes.get(position).getStudentName());
holder.tv.setTag(position);
if (!routes.get(position).colorRed){
holder.tv.setBackgroundColor(Color.GREEN);
}else {
holder.tv.setBackgroundColor(Color.RED);
}
return convertView;
}
为 activity_main.xml 中的 ListView 添加属性 "android:listSelector"。
例如android:listSelector="@drawable/selected".
<ListView
android:id="@+id/lv_my_list_view"
android:layout_width="match_parent"
android:listSelector="@drawable/selected"
android:layout_height="match_parent">
其中 selected.xml 是资源布局包含
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@android:color/holo_red_dark"/>
</selector>
我有一个 ListView,我想在其中将所选行更改为不同的颜色,但在未选中时将其重置为原始颜色。我使用 onItemSelectedListener 设置颜色,效果很好,但是取消选中后如何重置颜色?
谢谢。
创建侦听器接口:
public interface ListListener {
void clickListItem(int position);
}
这是模型 class:
public class Route {
String studentName;
boolean colorRed;
public Route(String studentName, boolean colorRed) {
this.studentName=studentName;
this.colorRed=colorRed;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public boolean isColorRed() {
return colorRed;
}
public void setColorRed(boolean colorRed) {
this.colorRed = colorRed;
}
}
创建适配器class:
public class AAdapter extends BaseAdapter implements View.OnClickListener {
Context context;
private List<Route> routes;
Holder holder;
private static LayoutInflater inflater=null;
ListListener listListener;
public AAdapter(Context context, List<Route> names,ListListener listListener) {
this.routes=names;
this.context=context;
this.listListener=listListener;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public void onClick(View view) {
listListener.clickListItem((Integer)view.getTag());
}
private class Holder
{
TextView tv;
}
@Override
public Route getItem(int position) {
return routes.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getCount() {
return routes.size();
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
holder=new Holder();
convertView=inflater.inflate(R.layout.custom_layout,null);
holder.tv=(TextView)convertView.findViewById(R.id.textView);
holder.tv.setOnClickListener(this);
convertView.setTag(holder);
}else {
holder=(Holder)convertView.getTag();
}
holder.tv.setText(routes.get(position).getStudentName());
holder.tv.setTag(position);
if (!routes.get(position).colorRed){
holder.tv.setBackgroundColor(Color.GREEN);
}else {
holder.tv.setBackgroundColor(Color.RED);
}
return convertView;
}
}
现在 MainActivity Class:
public class MainActivity extends AppCompatActivity implements ListListener{
AAdapter adapter;
ListView lv;
List<Route> myNames;
ListListener listListener=MainActivity.this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listnames);
myNames=new ArrayList<>();
/* DEMO DATA U NEED TO FETCH YOUR DATA */
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
adapter = new AAdapter(this, myNames,listListener);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void clickListItem(int position) {
if(myNames.get(position).colorRed){
myNames.get(position).colorRed=false;
}else {
myNames.get(position).colorRed=true;
}
adapter.notifyDataSetChanged();
}
}
public class路线{
boolean colorRed;
public Route(String studentName, boolean colorRed) {
this.colorRed=colorRed;
}
public boolean isColorRed() {
return colorRed;
}
public void setColorRed(boolean colorRed) {
this.colorRed = colorRed;
}
}
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
if(listitem.get(position).isColorRed){
listitem.get(position).setColorRed=false;
}else{
listitem.get(position).setColorRed=true;
}
youradapter.notifyDataSetChanged();
}
}
@NonNull @覆盖 public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
holder=new Holder();
convertView=inflater.inflate(R.layout.custom_layout,null);
holder.tv=(TextView)convertView.findViewById(R.id.textView);
holder.tv.setOnClickListener(this);
convertView.setTag(holder);
}else {
holder=(Holder)convertView.getTag();
}
holder.tv.setText(routes.get(position).getStudentName());
holder.tv.setTag(position);
if (!routes.get(position).colorRed){
holder.tv.setBackgroundColor(Color.GREEN);
}else {
holder.tv.setBackgroundColor(Color.RED);
}
return convertView;
}
为 activity_main.xml 中的 ListView 添加属性 "android:listSelector"。 例如android:listSelector="@drawable/selected".
<ListView
android:id="@+id/lv_my_list_view"
android:layout_width="match_parent"
android:listSelector="@drawable/selected"
android:layout_height="match_parent">
其中 selected.xml 是资源布局包含
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@android:color/holo_red_dark"/>
</selector>