我正在学习Android编程。 该活动有一个ListView,其中每个项目只是一个TextView。此ListView由一个自定义适配器填充,该适配器遍历cRecord的ArrayList,并为每个TextView设置适当的文本。 这个类cRecord有很多"字段" (成员),例如人名,电话号码......但只有人名在ListView上显示。 现在,当用户单击ListView以选择某个人时,我们如何才能到达与该人对应的cRecord类型的源对象?
答案 0 :(得分:0)
我试图通过构建需求的原型来解决这个问题。
我认为这个是你的cRecord课程:
public class cRecord{
String name;
String phoneNo;
//GETTERS AND SETTERS IF ANY
//METHOD IMPLEMENTATIONS IF ANY
}
您可以在活动中使用getObject方法,该方法将从cRecord列表中返回一个对象,用于填充ListAdapter:
public cRecord getObject(String name){
forech(cRecord c : listcRecord){
if(c.name == name){
return c;
}
}
return null;
}
最后,在listview的OnListItemClicked监听器中,您可以像这样获取被点击的对象:
ListView lv = (ListView)findViewById(R.id.listView1);
lv.setAdapter(new ArrayAdapter<Country>(
this,R.layout.list_black_text,R.id.list_content, values)); //values is the list holding objects of cRecord and R.id.list_content is the textview which you are using in your list to show the name.
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TextView textView = (TextView) view.findViewById(R.id.list_content);
String text = textView.getText().toString(); //Getting the text of view being clicked.
cRecord clickedObject = getObject(text); //Calling your getObject method here.
Toast.makeText(this,"phoneNo of " + clickedObject.phoneNo, Toast.LENGTH_SHORT).show();
}});
如果这没有帮助,您可以提及自己的代码,以便更清楚地提出问题。
答案 1 :(得分:0)
首先,您需要使用ListView OnItemClickListener callback Object方法设置setOnItemClickListener(AdapterView.OnItemClickListener listener)。
OnItemClickListener是一个具有一种方法的接口: onItemClick(AdapterView the_list, View view_clicked, int position_of_view_clicked, long id);
如果您使用自定义Adapter,则提供的ID将是Adapter#getItemId(int position)方法返回的ID。
此外,您还可以设置自定义适配器getItem(int position)以返回特定的对象。可以通过AdapterView#getItemAtPosition(int position)在OnItemClickListener回调对象中访问此对象。
一个例子是:
定义回调
import android.widget.AdapterView;
...
public class ... {
class ListCallback implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> list, View list_element, int position, long id) {
// Operations to access the appropriate record and show it
// To get the Adapter#getItem(int) result, use
// ObjectClass a = (ObjectClass) list.getItemAtPosition(position)
}
}
}
设置回调
import android.widget.ListView;
...
public class ... {
private ListView the_list;
/* method where the list is managed() */
the_list = (ListView) findViewById(R.id.list_id);
the_list.setOnItemClickListener(new ListCallBack());
}
请注意,回调对象是标准对象。
您还可以一次定义回调对象,如下所示:
import android.widget.AdapterView;
import android.widget.ListView;
...
public class ... {
private ListView the_list;
/* method where the list is managed() */
the_list = (ListView) findViewById(R.id.list_id);
the_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> list, View list_element, int position, long id) {
// Operations to access the appropriate record and show it
// To get the Adapter#getItem(int) result, use
// ObjectClass a = (ObjectClass) list.getItemAtPosition(position)
});
}