我正在尝试在Android中更新数据时更新ListView。
我使用mLeDeviceListAdapter.addRSSIandAddress("20");
将值设置为addRSSIandAddress
函数。
在addRSSIandAddress
中,它会收到值并致电mLeDeviceListAdapter.notifyDataSetChanged();
。但 NullPointerException
发生在 viewHolder.deviceRssi.setText("RSSI:" + String.valueOf(mrssi));
似乎 viewHolder.deviceRssi
null 或 viewHolder
null
ListView
和Adapter
的代码如下所示:
private LeDeviceListAdapter mLeDeviceListAdapter;
private static ListView device_list;
mLeDeviceListAdapter = new LeDeviceListAdapter(getActivity());
device_list.setAdapter(mLeDeviceListAdapter);
public class LeDeviceListAdapter extends BaseAdapter{
private LayoutInflater mInflator;
ArrayList<BluetoothDevice> mLeDevices;
private String mrssi;
public LeDeviceListAdapter(Context context) {
// TODO Auto-generated constructor stub
mInflator = LayoutInflater.from(context);
}
private void addRSSIandAddress(String rssi) {
// TODO Auto-generated method stub
mrssi = rssi;
mLeDeviceListAdapter.notifyDataSetChanged();
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder viewHolder;
Log.d(TAG, "getView");
if(view == null){
view = mInflator.inflate(R.layout.device_list, null);
viewHolder = new ViewHolder();
viewHolder.deviceRssi = (TextView) view.findViewById(R.id.device_rssi);
}else {
viewHolder = (ViewHolder) view.getTag();
viewHolder.deviceRssi.setText("RSSI:" + String.valueOf(mrssi));
}
return view;
}
}
static class ViewHolder {
TextView deviceRssi;
}
如何解决这个问题?提前谢谢。
答案 0 :(得分:1)
正如其他人所说的那样。我想你忘了设置
view.setTag(viewHolder).
尝试将此行放在此代码中
if(view == null)
{
view = mInflator.inflate(R.layout.device_list, null);
viewHolder = new ViewHolder();
viewHolder.deviceRssi = (TextView) view.findViewById(R.id.device_rssi);
view.setTag(viewHolder); //THE CODE
}
else
{
viewHolder = (ViewHolder) view.getTag();
viewHolder.deviceRssi.setText("RSSI:" + String.valueOf(mrssi));
}
return view;
答案 1 :(得分:0)
您使用:
viewHolder = (ViewHolder) view.getTag();
但你在setTag
某个地方吗?我不这么认为。
希望有所帮助
答案 2 :(得分:0)
尝试使用以下代码:
if(view == null){
view = mInflator.inflate(R.layout.device_list, null);
viewHolder = new ViewHolder();
viewHolder.deviceRssi = (TextView) view.findViewById(R.id.device_rssi);
view.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.deviceRssi.setText("RSSI:" + String.valueOf(mrssi));