Android:通过<key,value>对获取视图位置

时间:2016-02-24 06:32:27

标签: android json view hashmap android-viewholder

在我的应用程序应用程序中,我有一个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 ,可以帮助获取位置

1 个答案:

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

希望这会有所帮助!!