Android : 通过 <key,value> 对获取视图位置
Android : get the view position by a <key,value> pair
在我的应用程序应用程序中,我有一个 API 解析 JSON 更新 500 行 是列表看法。在一行中,我有 id、name、number 和 status。通过推送通知,我得到了 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 之一,是否有机会在视图中得到 position。
我试过HashMap。
**HashMap newmap = new HashMap(); // 在全局
newmap.put(subDistributerId,i); // 在循环中
Log.e("Tag ","hash map positon "+ newmap.get(43)); // 在 onResume 中**
但是失败了。
任何人都可以帮助获得行的位置,如果得到id该行。
您可以将 ArrayList 与 getter/setter class 一起使用。您还必须扩展 BaseAdapter class 以获取特定位置的字符串值并将其映射到视图。
你可以看看下面的例子--
下面的代码将遍历 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 class 以获得单独的位置和与之关联的值。
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;
}
}
最后调用此 class 并根据您的要求在代码中某处的列表视图中设置适配器。
baseAdapter = new MyBaseAdapter(context,listitem);
listView.setAdapter(baseAdapter);
希望对您有所帮助!!
在我的应用程序应用程序中,我有一个 API 解析 JSON 更新 500 行 是列表看法。在一行中,我有 id、name、number 和 status。通过推送通知,我得到了 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 之一,是否有机会在视图中得到 position。
我试过HashMap。
**HashMap newmap = new HashMap(); // 在全局
newmap.put(subDistributerId,i); // 在循环中
Log.e("Tag ","hash map positon "+ newmap.get(43)); // 在 onResume 中**
但是失败了。
任何人都可以帮助获得行的位置,如果得到id该行。
您可以将 ArrayList 与 getter/setter class 一起使用。您还必须扩展 BaseAdapter class 以获取特定位置的字符串值并将其映射到视图。
你可以看看下面的例子--
下面的代码将遍历 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 class 以获得单独的位置和与之关联的值。
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;
}
}
最后调用此 class 并根据您的要求在代码中某处的列表视图中设置适配器。
baseAdapter = new MyBaseAdapter(context,listitem);
listView.setAdapter(baseAdapter);
希望对您有所帮助!!