2016-11-30 1 views
0
aktualisiert wird

Ich habe eine ListView, in der ich die ausgewählte Zeile in einer anderen Farbe ändern möchte, aber es auf die ursprüngliche Farbe zurückgesetzt, wenn es nicht ausgewählt ist. Ich verwende onItemSelectedListener, um die Farbe einzustellen, was gut funktioniert, aber wie kann ich die Farbe zurücksetzen, nachdem sie nicht ausgewählt wurde?Android ListView, wie die Ansicht auf nicht ausgewählten

Danke.

+1

Code hier posten –

Antwort

0

erstellen Listener Interface:

public interface ListListener { 
    void clickListItem(int position); 
} 

Hier Modellklasse:

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; 
    } 
} 

erstellen Adapterklasse:

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; 
    } 
} 

Jetzt MainActivity Klasse:

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(); 
    } 
} 
+0

Vielen Dank! Ihre Probe hilft mir sehr! –

0

public class Strecke {

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 @Override Öffentlichkeit getView (int Position, Ansicht 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; 
} 
0

Attribut hinzufügen "android: listSelector" für Listview in activity_main.xml. z.B. android: listSelector = "@ zeichnungsfähig/ausgewählt".

<ListView 
     android:id="@+id/lv_my_list_view" 
     android:layout_width="match_parent" 
     android:listSelector="@drawable/selected" 
     android:layout_height="match_parent"> 

wo selected.xml eine Ressource Layout enthält

<?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> 
Verwandte Themen