-1

我想改变TEXT按钮上的按钮onclicklistener但对于每5行显示TEXT按钮相同的结果。我只是想更改文本按钮1个按钮点击的ListView自定义ArrayAdapter - 改变从按钮TEXT按钮OnClickListener

XML布局childview

<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布局的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" />  

这里代码

@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"); 
      }); 

适配器代码

public void refreshListJadwal() { 
    adapter = new AdapterListKereta(getActivity(), 
      R.layout.custom_list_jadwalkai, setGetJadwals, dataJadwalKereta); 
    listKereta.setAdapter(adapter); 
} 

“TEST” 显示,每5行。 请帮忙。如果你想点击,那么你可以使用ArrayList后更改按钮的文字谢谢

+0

邮适配器代码 – Raghavendra

+0

@Raghavendra我已经更新了我的问题 –

+0

在onclick u能尝试这样呢? ((按钮)v)的.setText( “TEST”); ? – Raghavendra

回答

0

我发现了一个解决办法,而不是一个最佳的解决方案,虽然:d试试这个,

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

不管它是什么,每5行显示TEXT按钮相同的文字,它解决了我的问题。谢谢@Raghavendra –

+0

很高兴!这有帮助。 – Raghavendra

0

1)设定位置作为标记按钮

2)当按钮点击,则找到位置form标签

3)由位置获得从创建的ArrayList相应文本和设置该文本到点击视图。

+0

listHolder.btnSeatMap.setTag(为arg0); int posButton =(Integer)v.getTag(); btnCheck.setText(data.get(posButton).getnmKereta()); 还是同样的结果,对于 –