Android 将动态字符串资源传递给;setText();

Android 将动态字符串资源传递给;setText();,android,Android,我试图生成一个动态字符串,并转换一个硬编码字符串,该字符串已传递给setText()函数。然而,它似乎不接受它。 以下是我尝试过的: 原始代码: device.name.setText("Mac :" + data.macAddress); Strings.xml声明: <string name="mac">Mac :</string> 代码段: public class DeviceAdapter extends RecyclerView.Adapter&

我试图生成一个动态字符串,并转换一个硬编码字符串,该字符串已传递给setText()函数。然而,它似乎不接受它。 以下是我尝试过的:

原始代码:

 device.name.setText("Mac :" + data.macAddress); 
Strings.xml声明:

<string name="mac">Mac :</string>
代码段:

   public class DeviceAdapter extends RecyclerView.Adapter<Device> {
    private final LayoutInflater mInflater;

    private final Device.IDeviceItem mListener;
    private final TextView mEmpty;

    public Vector<DeviceData> mDeviceData;

    public DeviceAdapter(Context context, TextView emptyView, Device.IDeviceItem listener) {
        mEmpty = emptyView;
        mListener = listener;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public Device onCreateViewHolder(ViewGroup parent, int position) {
        return new Device(mInflater.inflate(R.layout.item_device, parent, false), mListener);
    }

    @Override
    public void onBindViewHolder(Device device, int position) {
        DeviceData data = mDeviceData.elementAt(position);

        device.position = position;
        device.deviceId = data.deviceId;

        device.name.setText("Mac :" + data.macAddress);   // check this
        if (data.temperature == null) {
            device.temperature.setText(R.string.temp_notset);
        }else device.temperature.setText("Temperature set to " + data.temperature + "\u00B0" +" celsius.");

        if (data.powerState) {
            device.btnPower.setImageResource(R.drawable.power_off);

            if (!data.startState) {
                device.status.setText(R.string.pon_running);
                device.btnStart.setImageResource(R.drawable.start_off);
            } else {
                device.status.setText(R.string.pon_stop);
                device.btnStart.setImageResource(R.drawable.start_on);
            }

        } else {
            device.btnPower.setImageResource(R.drawable.power_on);
            device.status.setText(R.string.poff);
        }
    }

    @Override
    public int getItemCount() {
        int sz = mDeviceData.size();
        if (sz == 0) {
            mEmpty.setVisibility(View.VISIBLE);
        } else {
            mEmpty.setVisibility(View.GONE);
        }
        return sz;
    }

    public boolean hasDevice(DeviceData deviceData) {
        for (DeviceData device : mDeviceData) {
            if (device.deviceId.equalsIgnoreCase(deviceData.deviceId) && device.boxid.equalsIgnoreCase(deviceData.boxid))
                return true;
        }
        return false;
    }
}
公共类DeviceAdapter扩展了RecyclerView.Adapter{
私人最终布局平面图;
专用最终设备.IDeviceItem mListener;
私有最终文本视图内存;
公共向量mDeviceData;
公用设备适配器(上下文上下文、TextView emptyView、Device.IDeviceItem侦听器){
mEmpty=空视图;
mListener=监听器;
mInflater=LayoutInflater.from(上下文);
}
@凌驾
公用设备onCreateViewHolder(视图组父级,int位置){
返回新设备(mInflater.充气(R.layout.item_设备,父项,false),mListener);
}
@凌驾
公共无效onBindViewHolder(设备,内部位置){
DeviceData data=mDeviceData.elementAt(位置);
设备位置=位置;
device.deviceId=data.deviceId;
device.name.setText(“Mac:+data.macAddress);//检查此项
如果(data.temperature==null){
device.temperature.setText(R.string.temp\u notset);
}else device.temperature.setText(“温度设置为“+data.temperature+”\u00B0“+”摄氏度”);
if(data.powerState){
device.btnPower.setImageResource(R.drawable.power\u关闭);
如果(!data.startState){
device.status.setText(R.string.pon_running);
device.btnStart.setImageResource(R.drawable.start\u off);
}否则{
device.status.setText(R.string.pon_-stop);
device.btnStart.setImageResource(R.drawable.start_on);
}
}否则{
device.btnPower.setImageResource(R.drawable.power\u打开);
device.status.setText(R.string.poff);
}
}
@凌驾
public int getItemCount(){
int sz=mDeviceData.size();
如果(sz==0){
mEmpty.setVisibility(View.VISIBLE);
}否则{
mEmpty.setVisibility(View.GONE);
}
返回sz;
}
公共设备(DeviceData DeviceData){
用于(DeviceData设备:mDeviceData){
if(device.deviceId.equalsIgnoreCase(deviceData.deviceId)和&device.boxid.equalsIgnoreCase(deviceData.boxid))
返回true;
}
返回false;
}
}
因此,当我使用硬编码字符串时:它显示正确的值,但是当动态更改时,它会转换为整数“213136187044”。我做错了什么?我无法发布截图,因为我的声誉低于10。

请使用此截图

device.name.setText(data.macAddress + ""); 

试着这样做:

name= parent.getResources().getString(R.string.mac);
device.name.setText(name + data.macAddress);
创建一个全局变量,如:

private String name;
然后在“onCreateViewHolder”中这样写:

name= parent.getResources().getString(R.string.mac);
device.name.setText(name + data.macAddress);
现在,在“onBindViewHolder”中这样写:

name= parent.getResources().getString(R.string.mac);
device.name.setText(name + data.macAddress);

可能与第一个重复您应该正确地提供代码,然后询问问题。@MD:您不应该拒绝投票给新用户并劝阻他们。积分下降对寻求帮助的人施加了更多的限制。如果你能给我留下一个建议而不是让我失望,我将不胜感激-voting@Dexter是的,那很好。但是你应该至少看一次,因为每天都有1000个新的biee进来,如果他们问了100000个毫无意义的问题。所以最好是@MD:即使没有那个代码片段,我的问题也很有意义。。。我根据SO发布了所有详细信息。问题是什么,我尝试了什么,哪里出错了。所以要求用户针对这个问题,我想让字符串“Mac:”动态更改为我在strings.xml中输入的任何值。不过就像我说的,它给了我一个整数值,再次感谢。不幸的是,device.getResources()不可用:(嗨,同样的问题,parent.getResources()不可用您正在return语句方法之前的“onCreateViewHolder”中编写代码?是的,我在下面的顶部编写:private final TextView mEmpty;真棒…终于…非常感谢:)