Android 如何在ListView中获取HashMap id值?
我试图将ImageList添加到我的应用程序中。我成功地添加了它。它显示了我被选中的银行的徽标。我通过HashMap添加了这一点,因为我想在单击日志图像时获取银行名称 但是我无法在onItemClick方法中获取银行名称。有人能帮我解决这个问题吗 这是我的活动代码Android 如何在ListView中获取HashMap id值?,android,android-listview,Android,Android Listview,我试图将ImageList添加到我的应用程序中。我成功地添加了它。它显示了我被选中的银行的徽标。我通过HashMap添加了这一点,因为我想在单击日志图像时获取银行名称 但是我无法在onItemClick方法中获取银行名称。有人能帮我解决这个问题吗 这是我的活动代码 public void getImageData() { map = new HashMap<String, String>(); try { JSONObject jsonRespon
public void getImageData() {
map = new HashMap<String, String>();
try {
JSONObject jsonResponse = new JSONObject(strJson1);
JSONArray jsonMainNode = jsonResponse.optJSONArray("bank");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
img_url = jsonChildNode.optString("logo");
String test1 = img_test_url + img_url;
bName = jsonChildNode.optString("name");
map.put(bName, test1);
}
ItemsAdapter adapter = new ItemsAdapter(getApplicationContext(),map);
list.setAdapter(adapter);
} catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Connection Error...",
Toast.LENGTH_LONG).show();
}
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
HashMap<String, String> obj = (HashMap<String, String>) adapter.getItem(arg2);
String name = (String) obj.get("bName");
Log.d("Bank Name", name);
}
});
}
您应该创建一个银行对象,将其作为名称,将徽标作为属性,然后将银行对象的ArrayList传递给适配器。您有两个错误。首先,您试图访问一个未初始化的成员类,因为您正在对成员的类作用域进行hding,并用局部作用域重新定义变量。这很容易解决。你可以用
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
第二个错误是您正在将字符串
强制转换为哈希映射
。您的getItem
返回:
map.get(mKeys[position]);
由于您在自定义适配器中声明了HashMap
,getItem
实际上是返回一个字符串实例。所以你选错演员了。一旦您修复了NPE,您将得到一个ClassCastException
编辑:为了达到你想要的,你应该从
ArrayList
,或者您可以创建自己的javabean
。我假设您将使用对
类,id作为第一个元素,url作为第二个值getView
和getItem
。你可以摆脱
String key = mKeys[position];
String Value = getItem(position).toString();
@Override
public Object getItem(int position) {
return dataset.get(position);
}
而getView将从
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Pair<String, String> item = (Pair<String, String>)getItem(position);
String Value = item.second;
}
@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
Pair item=(Pair)getItem(position);
字符串值=item.second;
}
在McClick中,您将得到类似的结果:
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Pair<String, String> item = (Pair<String, String>)arg0.getItemAtPosition(arg2);
String id = item.first;
}
list.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
Pair item=(Pair)arg0.getItemAtPosition(arg2);
字符串id=item.first;
}
正如@Raghunandan正确指出的那样,您应该将所有与网络/阻塞相关的操作放在不同的线程中。最简单的方法是使用一个对android友好的AsyncTask。您可以阅读指南。当您按下ListView上的项目时,您的应用程序应该崩溃,或者什么?@blackbelt抱歉。我忘了上传logcat.n我是怎么更新的。@anuruddhika第161行是什么?@Raghundan HashMap obj=(HashMap)adapter.getItem(arg2);这就是那一行。@anuruddhika NPE是bcoz adapter没有初始化我没有得到它。:(你没有得到什么?你能更具体一点吗?我不明白,“我该怎么解决这个问题?”要修复
NPE
请使用onItemClick
的第一个参数@blackbelt Ok。我知道了。但它显示图像URL。我想获取hashMap的Id。它是银行名称。
@Override
public Object getItem(int position) {
return dataset.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Pair<String, String> item = (Pair<String, String>)getItem(position);
String Value = item.second;
}
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Pair<String, String> item = (Pair<String, String>)arg0.getItemAtPosition(arg2);
String id = item.first;
}