2014-02-26 33 views
0

本来,我使用HashMap的使用SimpleAdapter,像这样:我怎样才能用HashMap BaseAdapter

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
int leng = nodes.getLength(); 
for (int i = 0; i < leng; i++) { 
    HashMap<String, String> map = new HashMap<String, String>(); 
    Element e = (Element) nodes.item(i); 
    map.put("nama", parser.getValue(e, "nama")); 
    map.put("in", parser.getValue(e, "in")); 
    mylist.add(map); 
    } 
// Adding myList to ListView 
ListAdapter adapter = new SimpleAdapter(LihatFarmasiObat.this, mylist, 
R.layout.list_farmasi_obat, new String[] { "nama", "in" }, 
new int[] {R.id.txtListFarmasiNama, R.id.txtListFarmasiIn}); 

listFarmasiObat.setAdapter(adapter); 

但现在我试图把里面的EditText的ListView,我从here.得到这个代码 我试过这个代码,它的工作原理,(我需要改变一些,但代码工作)。 以及但是当我试图把它与我自己的代码结合起来,我得到一个错误无法从HashMap中投对这些行LihatFarmasiObat.ListItem

holder.caption.setText(((ListItem)mylist.get(position)).caption); 
//It got an error on mylist 

holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() { 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (!hasFocus){ 
      final int position = v.getId(); 
      final EditText Caption = (EditText) v; 
      ((ListItem)mylist.get(position)).caption = Caption.getText().toString(); 
      // it also got same error on mylist. 
     } 
    } 
}); 
return convertView; 

class ListItem { 
    String caption; 
    //this is the problem (I think) I don't know how to make this hashmap 
} 

我已经尝试将其更改为任何其他方式,但它不工作。

,这是我的全码:

public class MyAdapter extends BaseAdapter { 
private LayoutInflater mInflater; 

public MyAdapter() { 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     new LoadFarmasi().execute(); // This is for filling mylist with hashmap 
     notifyDataSetChanged(); 
    } 

    public int getCount() { 
     return mylist.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mInflater.inflate(R.layout.list_farmasi_obat, null); 
      holder.caption = (EditText) convertView.findViewById(R.id.editText1); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     //Fill EditText with the value you have in data source 

     holder.caption.setText(((ListItem)mylist.get(position)).caption); 
     holder.caption.setId(position); 

     //we need to update adapter once we finish with editing 
     holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() { 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (!hasFocus){ 
        final int position = v.getId(); 
        final EditText Caption = (EditText) v; 
        ((ListItem)mylist.get(position)).caption = Caption.getText().toString(); 
       } 
      } 
     }); 
     return convertView; 
    } 
} 

class ViewHolder { 
    EditText caption; 
} 
class ListItem { 
    String caption; 
} 

有人能帮助我吗?我与这场斗争了几天

回答

1

getView你需要使用

HashMap<String,String> map =mylist.get(position); 
// position gives you the index 
String value = map.get("nama"); 
String value2 = map.get("in"); 

现在使用String的并将其设置为相应的意见

你的HashMap的ArrayList中。