- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我希望能够根据其 _sensor_id
检查对象是否存在于 ArrayList
中,该对象显示在 ListView
中。
如果存在,我想设置它,如果不存在,我想添加它。每次此方法运行时,HashMap
数据都会不同,我希望它根据_sensor_id
检查它是否存在于ListView(ArrayList) 中。
if (mEquipmentList.isEmpty()) {
// Populate the Equipment List
HashMap < String, String > equip = new HashMap < String, String > ();
equip.put(FIRST_COLUMN, _sensor_id);
equip.put(THIRD_COLUMN, Double.toString(_speed) + "km/h");
equip.put(FOURTH_COLUMN, Double.toString(_heading) + "°");
equip.put(FIFTH_COLUMN, Double.toString(distance) + "m");
equip.put(SECOND_COLUMN, Double.toString(mEquipmentList.indexOf(equip)));
mEquipmentList.add(equip);
for (HashMap < String, String > entry: mEquipmentList) {
for (String key: entry.keySet()) {
String value = entry.get(key);
//Debugging
Log.d("equipment contains= ", "sensorid: " + mEquipmentList.get(0));
Log.d("equipment key = ", "key: " + key);
Log.d("equipment value = ", "value: " + value);
Log.d("equipment index", "value:" + (mEquipmentList.indexOf(equip)));
}
}
} else {
// Populate the Equipment List
HashMap < String, String > equip = new HashMap < String, String > ();
equip.put(FIRST_COLUMN, _sensor_id);
equip.put(THIRD_COLUMN, Double.toString(_speed) + "km/h");
equip.put(FOURTH_COLUMN, Double.toString(_heading) + "°");
equip.put(FIFTH_COLUMN, Double.toString(distance) + "m");
equip.put(SECOND_COLUMN, Double.toString(mEquipmentList.size()));
mEquipmentList.set(0, equip);
for (HashMap < String, String > entry: mEquipmentList) {
for (String key: entry.keySet()) {
String value = entry.get(key);
//Debugging
Log.d("equipment contains= ", "sensorid: " + mEquipmentList);
Log.d("equipment contains= ", "sensorid: " + mEquipmentList.contains(key));
Log.d("equipment key = ", "key: " + key);
Log.d("equipment value = ", "value: " + value);
Log.d("equipment index", "value:" + mEquipmentList.indexOf(equip));
}
}
}
// Set the adapter
ListViewAdapter adapter = new ListViewAdapter(this, mEquipmentList);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
编辑 *********
public void updateEquipList(String message) {
if (!pathHistory.isEmpty()) {
double currentLat = pathHistory.getFirst().lat;
double currentLng = pathHistory.getFirst().lng;
int currentOrientation = getResources().getConfiguration().orientation;
ListView listView = (ListView) findViewById(R.id.equip_list);
HashMap<String, Equipment> equipmentMap = new HashMap<String, Equipment>();
try {
List<String> data_list = Arrays.asList(message.split(","));
// point added (checks in correct format)
String _sensor_id = data_list.get(0);
if (_sensor_id.substring(0, Math.min(_sensor_id.length(), 2)).equals("DT")) {
double _lat = Double.parseDouble(data_list.get(3));
double _lng = Double.parseDouble(data_list.get(4));
double _heading = Double.parseDouble(data_list.get(5));
double _speed = Double.parseDouble(data_list.get(6));
int distance = (int) Trajectory.ChordLength(currentLat, currentLng, _lat, _lng);
boolean doesSensorExist = false;
// for input _sensor_id, check if there exists an Equipment object in map.
Equipment equip = equipmentMap.get(_sensor_id);
if(equip == null) // no object for this sensor_id
{
equip = new Equipment();
// populate equipment attributes in the object
equip.addParameter(THIRD_COLUMN, Double.toString(_speed) + "km/h");
equip.addParameter(FOURTH_COLUMN, Double.toString(_heading) + "°");
equip.addParameter(FIFTH_COLUMN, Double.toString(distance) + "m");
equip.addParameter(SECOND_COLUMN, Double.toString(mEquipmentList.indexOf(equip)));
// add this Equipment Object in the map.
equipmentMap.put(_sensor_id, equip);
/// since its a new object, add same to the mEquipmentList which is a unique array of Equipment Object
mEquipmentList.add(equip);
}
else // Equipment object exits for input _sensor_id string
{
//Update the values for eq object if they are changed
equip.addParameter(THIRD_COLUMN, Double.toString(_speed) + "km/h");
equip.addParameter(FOURTH_COLUMN, Double.toString(_heading) + "°");
equip.addParameter(FIFTH_COLUMN, Double.toString(distance) + "m");
equip.addParameter(SECOND_COLUMN, Double.toString(mEquipmentList.indexOf(equip)));
// here no need to add the Equipment Object in the ArrayList again.
}
// Set the adapter
ListViewAdapter adapter = new ListViewAdapter(this, mEquipmentList);
listView.setAdapter(adapter);
}
} catch(Exception e){
// Marker construction failed
Log.d(TAG, "Updating list failed: " + e.toString());
}
}
}
class Equipment extends HashMap<String, String> {
HashMap<String, String> parameters;
void addParameter(String key, String value)
{
parameters.put(key, value);
}
}
ListView 适配器
公共(public)类 ListViewAdapter 扩展 BaseAdapter {
public ArrayList<com.bhp.prox_aware.MapsActivity.Equipment> list;
Activity MapsActivity;
TextView txtFirst;
TextView txtSecond;
TextView txtThird;
TextView txtFourth;
TextView txtFifth;
public ListViewAdapter(Activity activity, ArrayList<com.bhp.prox_aware.MapsActivity.Equipment> list){
super();
this.MapsActivity=activity;
this.list=list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater=MapsActivity.getLayoutInflater();
if(convertView == null){
convertView=inflater.inflate(R.layout.equip_row, null);
/* TODO add an ImageView here for an icon to display next to the list */
txtFirst=(TextView) convertView.findViewById(R.id.name);
txtSecond=(TextView) convertView.findViewById(R.id.id);
txtThird=(TextView) convertView.findViewById(R.id.speed);
txtFourth=(TextView) convertView.findViewById(R.id.direction);
txtFifth=(TextView) convertView.findViewById(R.id.distance);
}
int color = Color.argb( 200, 34, 34, 34 );
HashMap<String, String> map=list.get(position);
txtFirst.setText(map.get(FIRST_COLUMN));
txtSecond.setText(map.get(SECOND_COLUMN));
txtThird.setText(map.get(THIRD_COLUMN));
txtFourth.setText(map.get(FOURTH_COLUMN));
txtFifth.setText(map.get(FIFTH_COLUMN));
//Check if within 100m if yes change colour of background to red
double distanceCheck = Double.parseDouble(map.get(FIFTH_COLUMN).replace("m", ""));
if(distanceCheck <= 100){
color = Color.argb( 200, 163, 0, 0 );
}else {
color = Color.argb(200, 34, 34, 34);
}
txtFirst.setTextColor(Color.WHITE);
txtFirst.setBackgroundColor( color );
txtSecond.setTextColor(Color.WHITE);
txtSecond.setBackgroundColor( color );
txtThird.setTextColor(Color.WHITE);
txtThird.setBackgroundColor( color );
txtFourth.setTextColor(Color.WHITE);
txtFourth.setBackgroundColor( color );
txtFifth.setTextColor(Color.WHITE);
txtFifth.setBackgroundColor( color );
return convertView;
}
}
最佳答案
您应该能够以稍微不同的方式对代码结构进行建模如果可能的话,创建一个类,例如设备,其属性用于将列参数(如速度、温度等)存储为字符串映射,字符串该类
class Equipment
{
HashMap<String, String> parameters;
void addParameter(String key, String value)
{
parameters.put(key, value);
}
}
在您的逻辑中,sensor_id 是保持 Equipment 对象唯一性的关键。因此创建一个字符串和设备的映射
HashMap<String, Equipment> equipmentMap = new HashMap<String, Equipment>();
// for input _sensor_id, check if there exists an Equipment object in map.
Equipment equip = sensorMap.get(_sensor_id);
if(equip == null) // no object for this sensor_id
{
equip = new Equipment();
// populate equipment attributes in the object
equip.addParameter(THIRD_COLUMN, Double.toString(_speed) + "km/h");
equip.addParameter(FOURTH_COLUMN, Double.toString(_heading) + "°");
equip.addParameter(FIFTH_COLUMN, Double.toString(distance) + "m");
equip.addParameter(SECOND_COLUMN, Double.toString(mEquipmentList.indexOf(equip)));
// add this Equipment Object in the map.
sensorMap.put(_sensor_id, equip);
/// since its a new object, add same to the mEquipmentList which is a unique array of Equipment Object
mEquipmentList.add(eq);
}
else // Equipment object exits for input _sensor_id string
{
//Update the values for eq object if they are changed
equip.addParameter(THIRD_COLUMN, Double.toString(_speed) + "km/h");
equip.addParameter(FOURTH_COLUMN, Double.toString(_heading) + "°");
equip.addParameter(FIFTH_COLUMN, Double.toString(distance) + "m");
equip.addParameter(SECOND_COLUMN, Double.toString(mEquipmentList.indexOf(equip)));
// here no need to add the Equipment Object in the ArrayList again.
}
// notify adapter for data change
adapter.notifyDataSetChanged();
HashMap 有助于根据 _sensor_id 保持数据的唯一性。
希望这有帮助..
关于java - Android Arraylist迭代根据是否存在设置或添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45853087/
SELECT *, `o_cheque_request.member_id`, `o_cheque_request.wallet_id` FROM `o_cheque_request`, `o_mem
根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要**SELECT count(*)**呢? 无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如
我试图找出一个文件是否存在,如果存在,验证css样式是否已经存在,如果不存在,将它们写在文件末尾... 我已经完成了这一切,但分 3 个步骤: 该文件是否存在? FileInfo fi= new Fi
我们正在开发即时消息传递应用程序,并且需要在用户的化身上用绿点显示用户 friend 的“状态”。 “状态”远远超出了“my_app_is_opened_and_on_focus”,这意味着(我猜可能
模式 Movie(title, year, director, budget, earnings) Actor(stagename, realname, birthyear) ActedIn(stag
我有一个正在尝试创建的 MySQL 触发器,但无法获得正确的语法。 触发器应该遍历一组关键字并将其与插入数据库的新帖子的标题进行匹配。如果找到匹配项,它应该将新帖子分配给该存储桶并更新存储桶的关键字集
我有 3 个表......用户、更新和碰撞。 我想向发出 api 请求的用户返回最新订单的 feed 更新,并提供显示 feed 中每个状态所需的所有数据。我还需要包括更新是否已被发出 api 请求的
我正在尝试呈现一个带有 UIView 的 UIViewController。 以下是我在 viewDidLoad 方法中尝试的代码。 //create the view controller UIVi
我正在努力弄清楚如何在不对 mysql 进行两次调用的情况下从一个表中检查两件事。 我有一个 Members 表。我想测试MemberID 列中是否存在某个值,以及PhoneNumber 列中是否存在
以下代码给出了一个没有 Do Compile 错误的循环: Loop Sheets("Snap").Rows(1).AutoFilter Field:=5, Criteria1:=List
是否可以通过检查“dig”的输出来检查域名的存在? 在绑定(bind)源中,我发现了这些常量: 0 DNS_R_NOEROR 1 DNS_R_FORMERR 2 DNS_R_SERVFAIL 3 DN
Controller 有问题 我在 Windows 上使用服务器,一切正常,但在互联网上我试图访问页面 social_apartament/beauty_life/并且找不到该页面,代码错误 404这
/** This is struct S. */ struct S(T) { static if(isFloatingPoint!T) { /// This version works
JVM 类型删除如何帮助 Clojure?没有它,Clojure 还能存在吗?如果 JVM 有具体化的类型会发生什么?也就是说,Clojure 将如何改变? 最佳答案 Clojure 根本不会有太大变
许多论文等提到对“system()”的调用是不安全且不可移植的。我不反对他们的论点。 不过,我注意到许多 Unix 实用程序都有一个等效的 C 库。如果没有,源可用于各种这些工具。 虽然许多论文和此类
在我的 Node js 应用程序中,我有一个用户登录 api。上面我在服务器端代码中创建了一个名为 customerid 的变量。现在,当用户身份验证成功时。我将他的 userid 值存储在我的 cu
我有一个工作资源管理器组,由 Ubuntu 14.04 虚拟机、网络接口(interface)、公共(public) IP 地址和存储帐户组成。我已经从这组资源中创建了一个模板。 当我尝试部署这组资源
我有一个函数createminor4(arr,锦标赛)它基本上将arr分成4组,每组8人,然后将它们一次交换到tourney 1组。从那里它插入四个{},其中有 4 个带有空数组的键。 我已经在 Ch
我有一个图表,其中有两个图例。我需要更改其中一个图例的点的大小。 我需要更改图例中“市场类型”的项目符号大小。我使用示例 here但不适用于我的图表。 我的代码如下: k <- ggplot(subs
我有 fiddle here展示我正在尝试做的事情。 我有一个动态生成的表,因此列可以按用户选择的任何顺序显示。因此,我尝试获取两个特定 header 的索引,以便可以将 CSS 类添加到这两列以供稍
我是一名优秀的程序员,十分优秀!