2016-02-24 92 views
0

獲取視圖位置在我的應用程序的應用程序我有一個解析JSON更新500行是列表視圖的API。我連續有id,姓名,號碼和狀態。通過pushnotification獲取id中的500個,我想更新該行的id的狀態。安卓:由<key,value>對

正在使用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(); // in global

newmap.put(subDistributerId,i); //在循環中

Log.e(「Tag」,「hash map positon」+ newmap.get(43)); // onResume **

但失敗。

可以在任何請幫助得到的行的位置,如果得到該行的ID

+0

我想這裏是你在找什麼,http://stackoverflow.com/a/18016073/2509009 – asadnwfp

+0

我怎麼能得到在arrayList中的位置,如果我給了一個ID @asadnwfp –

回答

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

希望這有助於!

+0

上午使用RecyclerView。適配器,同時我正在尋找在arrayList中獲得一個位置,如果給了ID,ID是arrayList中的一個內容@Saumik Bhattacharya –

+0

@BinilS - 將執行多少次'listitem.add(item)',數據將在隨後的職位相關聯。你在尋找你點擊過的物品的位置嗎? –

+0

你在哪裏對,但是如果我要從數組列表中找到一個id,並且數組列表的大小是1000,它會導致很長的執行時間。我通過使用HashMap找到了解決方案。感謝您的幫助@Saumik Bhattacharya –