在网上看了好多文章,写得太专业了,对于我这种散修来说,看完还是茫然。还好看得多了,总也学到点东西,按着自己的理解,尝试了一下,居然也能成功。
记下来,别忘了。
1. Adapter文件;
在Adapter文件中,可以在getView函数中更新数据,也可以 另造一个public函数来更新数据,意义和getView是相同的;
public List1Adapter(Context context, int textViewResourceId, List objects) {
super(context, textViewResourceId, objects);
//把这个ID记录下来;
m_resID = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
List1Item _listItem = (List1Item) getItem(position); // 获取当前项的data实例
View _view1;
//这一步的处理比较重要
//如果不使用convertView,而使用LayoutInflater.fromg来获取View,在外部更新数据时,就不能调用getView来;
//以前没学好,一直没理解这个Adapter的工作方式,学着别人的方法更新,调用getView总是失败;
if (convertView != null) {
//如果参数中的VIEw有效,就使用这个;
_view1 = convertView;
} else {
//查找构造函数提供的ID代表的VIEW;
_view1 = LayoutInflater.from(getContext()).inflate(m_resID, null); //实
}
showData(_view1, _listItem);
return _view1;
}
public void showData(View _view, List1Item _listItem) {
TextView _onlineState;
//更新VIEW显示的数据;
((TextView) _view.findViewById(R.id.list01_lab1)).setText(_listItem.getDeviceName());
((TextView) _view.findViewById(R.id.list01_comp)).setText(_listItem.getCompanyName());
_onlineState = ((TextView) _view.findViewById(R.id.list01_online));
((TextView) _view.findViewById(R.id.list01_temper1)).setText("当前 " + xiaoid.util.NumericHelper.stringOf(_listItem.currentTemper, "0.0") + "℃");
((TextView) _view.findViewById(R.id.list01_temper2)).setText("目标 " + xiaoid.util.NumericHelper.stringOf(_listItem.targetTemper, "0.0") + "℃");
_onlineState.setText(_listItem.getStateStr());
}
2. 根据需求更新数据
1) 根据用户点击的记录行来更新数据;
m_list1 = findViewById(R.id.act1_list1);
m_list1.setonItemClickListener(new AdapterView.onItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
//参数中的position即为记录行索引;
}
});
2) 根据通讯数据更新对应的记录行;
上述两种方法,都有一个共同的position(即listView的行索引);
private void showDeviceRealtimeInfo(List1Item _item, int _index) {
if (m_list1Adp == null) {
return;
}
//获取listView当前显示的范围;判断index是否在当前显示范围内;
int _inx1 = m_list1.getFirstVisiblePosition();
int _inx2 = m_list1.getLastVisiblePosition();
View _view;
//判断要更新的行索引是否在inx1,inx2之间(当前可视屏幕范围,不在范围内的,listView滑动到该行时会更新)
if (_index >= _inx1 && _index <= _inx2) {
//获取该行对应的View;
_view = m_list1.getChildAt(_index - _inx1);
//通过Adapter的getView刷新该行的数据;
//m_list1Adp.getView(_index, _view, m_list1);
//调用自定义的接口刷新数据(同getView一样的效果);
m_list1Adp.showData(_view, _item);
}
}
按着自己的理解去写了一次,成功之后,突然发现,别人写的也能看懂了……



