-1

Ich möchte Textbutton on Button onclicklistener ändern, aber für jede 5 Zeile Textbutton dasselbe Ergebnis anzeigen. Ich möchte nur Text Taste 1 TasteListView Custom ArrayAdapter - Ändert Textbutton von Button OnClickListener

xml Layout childview geklickt ändern

<Button 
    android:id="@+id/btn_seatmap" 
    style="@style/buttonSeatMap" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/txt_kereta_tiba" 
    android:layout_toRightOf="@+id/txt_info_seat" 
    android:focusable="false" 
    android:focusableInTouchMode="false" 
    android:text="@string/btn_seatmap" />  

xml Layout Listview

<ListView 
    android:id="@+id/list_kereta" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/btn_pilih_jadwal" 
    android:layout_below="@+id/txt_title_jadwal_kai" 
    android:layout_marginBottom="10dp" 
    android:background="@android:color/white" 
    android:choiceMode="singleChoice" 
    android:dividerHeight="1dp" 
    android:focusable="true" 
    android:scrollbars="none" />  

und hier Code von benutzerdefinierten Adapter

@Override 
public View getView(final int arg0, View arg1, ViewGroup arg2) { 
    View view = arg1; 
    ListHolder listHolder = null; 

    if (view == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     view = inflater.inflate(layoutResourceId, arg2, false); 

     listHolder = new ListHolder(); 
     listHolder.layout = (RelativeLayout) view 
       .findViewById(R.id.layout_jadwal_kai); 
     listHolder.txtNama = (TextView) view 
       .findViewById(R.id.txt_nama_kereta); 
     listHolder.txtBerangkat = (TextView) view 
       .findViewById(R.id.txt_kereta_brkt); 
     listHolder.txtHarga = (TextView) view 
       .findViewById(R.id.txt_harga_kereta); 
     listHolder.txtTiba = (TextView) view 
       .findViewById(R.id.txt_kereta_tiba); 
     listHolder.txtClass = (TextView) view 
       .findViewById(R.id.txt_kelas_kereta); 
     listHolder.txtSeat = (TextView) view 
       .findViewById(R.id.txt_info_seat); 
     listHolder.btnSeatMap = (Button) view 
       .findViewById(R.id.btn_seatmap); 
     CheckSeatOnProgress = false; 
     view.setTag(listHolder); 
    } else { 
     listHolder = (ListHolder) view.getTag(); 
    } 
     listHolder.btnSeatMap.setTag(listHolder); 
     listHolder.btnSeatMap.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       ListHolder holder = (ListHolder) v.getTag(); 
       holder.btnSeatMap.setText("TEST"); 

       // listHolder.btnSeatMap.setText("TEST"); 
      }); 

Adaptercode

"TEST" Anzeige für jede 5 Zeile. bitte helfen. danke

+0

Beitrag Adaptercode – Raghavendra

+0

@Raghavendra Ich habe aktualisiert meine Frage –

+0

Im Onclick u kann wie folgt versuchen? ((Schaltfläche) v) .setText ("TEST"); ? – Raghavendra

Antwort

0

ich eine Arbeit um gefunden, keine optimale Lösung aber: D diese versuchen,

private HashMap<Integer, String> selected = new HashMap<Integer, String>(); 

@Override 
    public View getView(final int position, @Nullable View arg1, @NonNull ViewGroup parent) { 

     View view = arg1; 
     ListHolder listHolder = null; 

     if (view == null) { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      view = inflater.inflate(R.layout.list_item, parent, false); 

      listHolder = new ListHolder(); 
      listHolder.nameTextView = (TextView) view.findViewById(R.id.listitem1); 
      listHolder.btnSeatMap = (Button) view.findViewById(R.id.listbtn1); 
      view.setTag(listHolder); 
     } else { 
      listHolder = (ListHolder) view.getTag(); 

     } 

     if(selected != null && !selected.isEmpty() && selected.get(position) != null) 
      listHolder.btnSeatMap.setText("TEST"); 
     else { 
      listHolder.btnSeatMap.setText(""); 
     } 

     listHolder.btnSeatMap.setTag(position); 
     listHolder.nameTextView.setText(itemsArrayList[position]); 
     listHolder.btnSeatMap.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       int which = -1; 
       Object obj = v.getTag(); 
       if (obj instanceof Integer) 
       { 
        which = (Integer) obj; 
       } 
       Log.e("POSISITON", which+""); 
       selected.put(which, "TEST"); 
       notifyDataSetChanged(); 
      }}); 

     return view; 
    } 
+0

Was auch immer es ist, löst es mein Problem. Danke @Raghavendra –

+0

Froh! das hat geholfen. – Raghavendra

0

Wenn Sie den Text der Schaltfläche nach dem Klicken ändern möchten, können Sie ArrayList verwenden.

1) eingenommene Stellung als Tag-Taste

2) Wenn die Taste angeklickt wird, dann Position Formulartag

3) Holen entsprechenden Text aus erstellten Arraylist von Position und setzen Sie diesen Text findet Ansicht geklickt.

+0

listHolder.btnSeatMap.setTag (arg0); int posButton = (Ganzzahl) v.getTag(); btnCheck.setText (data.get (posButton) .getnmKereta()); noch das gleiche Ergebnis, textbutton Anzeige gleichen Text für jede 5 Zeile –

Verwandte Themen