在我的应用程序应用程序中,我有一个API,解析 JSON 更新 500行是列表视图。连续我有id,姓名,号码和状态。通过推送通知我从500中获得了 id ,我希望更新该行的id的状态。
我在这里使用 getter / setter 方法,所以如果获取视图位置,我可以更新该行。
这是解析的方式
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
String phone = c.getString("phone");
String subDistributorStatus = c.getString("status");
String name = c.getString("firstName");
subDistributerId = c.getString("subDistributerId");
SubdistributorItem item = new SubdistributorItem();
item.setSubDistributorName(name);
item.setSubDistributorNumber(phone);
item.setSubDistributorStatus(subDistributorStatus);
item.setSubDistributorId(subDistributerId);
}
这是我更新单行的方式
SubdistributorItem subdistributorItem = subdistributorItemList.get(Integer.parseInt(getFromPreference("Sub_position")));
String phone= subdistributorItem.getSubDistributorNumber();
String id= subdistributorItem.getSubDistributorId();
String status= subdistributorItem.getSubDistributorStat
通过点击视图获取位置。 现在,如果我在行中获得 id 之一,则有可能在视图中获得位置。
我试过HashMap。
** HashMap newmap = new HashMap(); //在全球
newmap.put(subDistributerId,I); //在循环中
Log.e(“Tag”,“hash map positon”+ newmap.get(43)); //在onResume **
但失败了。
如果获得该行的 id ,可以帮助获取行的位置。
答案 0 :(得分:1)
您可以将ArrayList与getter / setter类一起使用。您还必须扩展BaseAdapter类以获取特定位置的字符串值并将其映射到视图。
您可以查看以下示例 -
下面的代码将遍历JSON并使用Setter方法设置值,然后将它们添加到ArrayList。
ArrayList<SubdistributorItem> listitem = new ArrayList<>();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject c = jsonArray.getJSONObject(i);
String phone = c.getString("phone");
String subDistributorStatus = c.getString("status");
String name = c.getString("firstName");
subDistributerId = c.getString("subDistributerId");
SubdistributorItem item = new SubdistributorItem();
item.setSubDistributorName(name);
item.setSubDistributorNumber(phone);
item.setSubDistributorStatus(subDistributorStatus);
item.setSubDistributorId(subDistributerId);
listitem.add(item);
}
然后扩展BaseAdapter类以获取单个位置以及与之关联的值。
public class MyBaseAdapter extends BaseAdapter {
public Context ba_context;
public ArrayList<SubdistributorItem> listitem = new ArrayList<>();
public LayoutInflater inflater;
ListRowItem currentlistitem;
public MyBaseAdapter(Context ma_context, ArrayList<SubdistributorItem> ma_listitem) {
super();
this.ba_context = ma_context;
this.listitem = ma_listitem;
inflater = (LayoutInflater) ba_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return this.listitem.size();
}
@Override
public Object getItem(int position) {
return this.listitem.get(position);
}
@Override
public long getItemId(int position) {
return (long) position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.listview_item_layout, parent, false);
TextView carrier = (TextView) vi.findViewById(R.id.layout_textview1);
currentlistitem = listitem.get(position);
String str_carrier = currentlistitem.getCarrier();
carrier.setText(str_carrier);
return vi;
}
}
最后调用此类,并根据您的要求在代码中的某个位置设置适配器。
baseAdapter = new MyBaseAdapter(context,listitem);
listView.setAdapter(baseAdapter);
希望这会有所帮助!!