#android #listview
#Android #listview
Вопрос:
В моем приложении мне нужно переходить от одного действия к другому в зависимости от выбранного списка. В каждом listview будет три textview, а именно: Emp_id, Emp_name, Emp_address , поэтому всякий раз, когда я нажимаю на определенный список, который должен перейти к следующему действию соответствующего Emp_id. Итак, здесь я хочу перехватить Emp_id, чего я не могу. Я много пробовал, но получил только первый Emp_id, а не список, на который я нажал.
код:
ArrayList<HashMap<String, String>> mylist2 = new ArrayList<HashMap<String, String>>();
try{
JSONObject jObj = new JSONObject(Mydetail);
JSONArray data = jObj.getJSONArray("mydata");
for(int i=0;i<data.length();i ){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = data.getJSONObject(i);
map.put("id", String.valueOf(i));
map.put("Eid", "" e.getString("E_id"));
map.put("Ename", "" e.getString("E_name"));
map.put("Eaddress", "" e.getString("E_address"));
mylist2.add(map);
}
}catch(JSONException e) {
Log.e("log_tag", "Error parsing data " e.toString());
}
ListAdapter adapter = new SimpleAdapter(this, mylist2 , R.layout.datalist,
new String[] { "Eid", "Ename", "Eaddress" },
new int[] { R.id.TextView1,R.id.TextView2e,R.id.TextView3 });
setListAdapter(adapter);
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@SuppressWarnings("unchecked")
HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
//String val = o.get("id");
Pnm = (TextView)findViewById(R.id.TextView1);
String str = ((TextView)Pnm).getText().toString();
Toast.makeText(projects.this, str,Toast.LENGTH_LONG).show();
Intent newActivitySecond = new Intent(projects.this, modules.class);
projects.this.startActivity(newActivitySecond);
}
});
Спасибо
Ответ №1:
Попробуйте вот так:
ListView lv_ArchivePartylist;
lv_ArchivePartylist = (ListView)findViewById(R.id.archive_ListView01);
lv_ArchivePartylist.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
// TODO Auto-generated method stub
String message = view.findViewById(R.id.txt_box1).getText().toString;
Toast.makeText(Activityname.this, message, Toast.LENGTH_SHORT).show();
}
}
});
Ответ №2:
попробуйте это
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@SuppressWarnings("unchecked")
HashMap<String, String> o = (HashMap<String, String>) mylist2.get(position);
String Emp_id = o.get("Eid");
//use this Emp_id
}
});
Ответ №3:
Вы должны использовать set onclicklistener для всех элементов внутри ListView. Я создал listview. установите адаптер для listview. Мой адаптер отвечает за отображение каждого элемента listview. итак, внутри getView() Я назначу onclicklistener всем элементам, для которых я хочу получить событие click
Пример
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
ViewHolder holder;
if(convertView==null){
vi = inflater.inflate(R.layout.item, null);
holder=new ViewHolder();
holder.text=(TextView)vi.findViewById(R.id.text);;
holder.image=(ImageView)vi.findViewById(R.id.image);
vi.setTag(holder);
}
else
holder=(ViewHolder)vi.getTag();
holder.text.setText("item " position);
holder.image.setTag(data.get(position));
holder.image.setOnClickListener(this);
holder.text.setOnClickListener(this);
imageLoader.DisplayImage(data.get(position), activity, holder.image);
return vi;
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
System.out.println("...clicked view is...." arg0);
}
Комментарии:
1. Я предоставил код (выше), который я фактически использую сейчас, поэтому, изменив существующий код, я могу это исправить.