为了账号安全,请及时绑定邮箱和手机立即绑定

如何从另一个类刷新列表适配器?

如何从另一个类刷新列表适配器?

SMILET 2023-07-19 16:06:53
我想知道是否有人可以帮助我处理我的代码。我有一个 ListView,其中列出了数据库中的设备。每个设备都有一个用彩色图标表示的状态。每个设备还有一堆按钮来启动/停止/等设备并且可以工作(在注销和登录图标改变颜色后)。我想要做的是以某种方式刷新此列表,以便图标颜色是最新的。提前致谢!ListAdapter.java:public class ListAdapter extends ArrayAdapter<String> {    private final Activity context;    private final String[] deviceName;    private final String[] ip;    private final Integer[] imgid;    public ListAdapter(Activity context, String[] deviceName, String[] ip, Integer[] imgid) {        super(context, R.layout.list_item, deviceName);        this.context = context;        this.deviceName = deviceName;        this.ip = ip;        this.imgid = imgid;    }    public View getView(final int position, View view, ViewGroup parent) {        LayoutInflater inflater = context.getLayoutInflater();        View rowView = inflater.inflate(R.layout.list_item, null, true);        TextView titleText = (TextView) rowView.findViewById(R.id.title);        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);        TextView subtitleText = (TextView) rowView.findViewById(R.id.subtitle);        Button startBtn = (Button) rowView.findViewById(R.id.startBtn);        Button stopBtn = (Button) rowView.findViewById(R.id.stopBtn);        final String URL3 = "http://damiangozdzi.nazwa.pl/pact-dev/sendstatus.php";        titleText.setText(deviceName[position]);        imageView.setImageResource(imgid[position]);        subtitleText.setText(ip[position]);        startBtn.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View view) {                Toast.makeText(getContext(), "Device has been started", Toast.LENGTH_SHORT).show();                SenderStatus s = new SenderStatus(getContext(), URL3, Integer.toString(position +1), "3");                s.execute();                //I tried to refresh my list from here but nothing worked            }        });    }}
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

在适配器内创建一个方法来接收您的deviceName, ip, imgid参数。然后你只需要在点击按钮时调用它即可。


在适配器上:


public void refreshData(String[] deviceName, String[] ip, Integer[] imgid){

    this.deviceName = deviceName;

    this.ip = ip;

    this.imgid = imgid;

    notifyDataSetChanged();

}

然后点击按钮:


adapter.refreshData(yourDeviceNameVariable, yourIpVariable, yourImdidVariable);

我建议您将此代码放入一个方法中,其中 deviceName、ip 和 imdid 变量是全局变量,并在刷新适配器之前单击按钮时调用该方法。


Devices d = Devices.getInstance();

String s = d.getString();

String[][] all = getDevices(s);


deviceName = all[0];

ip = all[1];

String[] pre_imgid = all[2];

int x = pre_imgid.length;

Integer[] imgid = new Integer[x];

for (int i = 0; i < x; i++){

    switch(pre_imgid[i]){

        case "0":

            imgid[i] = R.drawable.large_circle_szary; break;

        case "1":

            imgid[i] = R.drawable.large_circle_czerwony; break;

        case "2":

            imgid[i] = R.drawable.large_circle_pomarancz; break;

        case "3":

            imgid[i] = R.drawable.large_circle_zielony; break;

        default:

            imgid[i] = R.drawable.large_circle_niebieski; break;

    }

}


查看完整回答
反对 回复 2023-07-19
?
侃侃无极

TA贡献2051条经验 获得超10个赞

这是你需要解决的问题。我将为您提供更改要点,但您需要更新您的代码。

在启动/停止的 onclicklistener 中,您需要手动获取所选对象并更新数据,其中视图将动态更新。

在这里,您必须使用列表中的对象对父布局执行类似 settag() 的操作,我看到有多个列表,请使用要更新视图的列表的对象。

例如:// your parentlayout.setTag(devicename[position])

在onclicklistner中,需要获取这个对象

例如:// get your object from settag:- DeviceName dobj = (DeviceName) view.getTag()

更远:

dobj.updateview, // something your logic of updating view.

就这样,你可以开始了,但问题是你的班级设计。

建议:

  1. 创建另一个模型类,其中您的 deviname 和 ip 也是您想要在 onclicklistener 中编辑/更新的数据/字段

  2. 尝试使用列表/映射,最好将列表传递给适配器。


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信