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);

希望对您有所帮助!!