【问题标题】:ListView Custom ArrayAdapter - Changes textbutton from Button OnClickListenerListView 自定义 ArrayAdapter - 从 Button OnClickListener 更改 textbutton
【发布时间】:2017-08-30 06:03:30
【问题描述】:

我想更改按钮 onclicklistener 上的文本按钮,但每 5 行文本按钮显示相同的结果。我只想更改单击的 1 个按钮的文本按钮

xml 布局子视图

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

每 5 行显示一次“TEST”。 请帮忙。谢谢

【问题讨论】:

  • 发布适配器代码
  • @Raghavendra 我已经更新了我的问题
  • 在onclick你可以这样试试吗? ((Button)v).setText("TEST"); ?
  • @Raghavendra 仍然是相同的结果,文本按钮每 5 行显示相同的结果
  • 你能试试 Mangal 的回答吗?

标签: android listview android-arrayadapter android-adapter custom-adapter


【解决方案1】:

我找到了解决方法,但不是最佳解决方案: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;
    }

【讨论】:

  • 不管是什么,它都能解决我的问题。谢谢@Raghavendra
  • 很高兴!这有帮助。
【解决方案2】:

如果您想在单击后更改按钮的文本,则可以使用 ArrayList。

1)将位置设置为按钮的标签

2)当按钮被点击时,找到位置表单标签

3) 从创建的 ArrayList 中按位置获取相应文本,并将该文本设置为单击视图。

【讨论】:

  • listHolder.btnSeatMap.setTag(arg0); int posButton = (Integer) v.getTag(); btnCheck.setText(data.get(posButton).getnmKereta());结果还是一样,textbutton 每 5 行显示相同的文本
猜你喜欢
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多