我有一个ListView,其中包含联系信息(姓名,电话号码),所以当我点击联系人姓名时,我希望在对话框中显示其名称和电话号码(其中已有代码)是:
public void ShowMessage(String titulo,String msg){
AlertDialog.Builder dialogo = new AlertDialog.Builder(this);
dialogo.setMessage(msg);
dialogo.setTitle(titulo);
dialogo.setNeutralButton("OK", null);
dialogo.show();
}
然后我看到了setOnItemClickListener
,但是当我尝试将它放在我的.java文件中时,它甚至没有建议代码,是否有人知道为什么或如何做到这一点?
编辑:
//LISTVIEW database CONTATO
ListView user = (ListView) findViewById(R.id.lvShowContatos);
//String = simple value ||| String[] = multiple values/columns
String[] campos = new String[] {"nome", "telefone"};
list = new ArrayList<String>();
Cursor c = db.query( "contatos", campos, null, null, null, null, null);
c.moveToFirst();
String lista = "";
if(c.getCount() > 0) {
while(true) {
list.add(c.getString(c.getColumnIndex("nome")).toString());
if(!c.moveToNext()) break;
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, list);
user.setAdapter(adapter);
这是我的listview / adapter
的代码OBS:如果你能解释更好(没有关联(如果可能的话,更好))
答案 0 :(得分:1)
(我看到你自己正在处理一个Cursor并使用ArrayAdapter,了解SimpleCursorAdapter会为你做这个。请参阅下面的注释。)
无论如何,将Cursor更改为类变量并尝试在onCreate()
:
user.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
c.moveToPosition(position);
String nome = c.getString(c.getColumnIndex("nome"));
String telefone = c.getString(c.getColumnIndex("telefone"));
showMessage(nome, telefone);
}
});
您并不具体说明标题和消息与联系人姓名的关联方式,因此我将该部分更新了。
类变量只是在一个地方定义的变量,使整个类可见。例如,这会将c
转换为类变量,因此您可以在onItemClick()
中使用它:
public class MyActivity extends Activity {
Cursor c;
public void onCreate(...) {
...
c = db.query( "contatos", campos, null, null, null, null, "nome");
...
}
}
了解您可以简化阅读联系人的方式:
list = new ArrayList<String>();
Cursor c = db.query("contatos", campos, null, null, null, null, "nome");
int nameIndex = c.getColumnIndex("nome");
while(c.moveToNext()) {
list.add(c.getString(nameIndex));
}
我做了一些改变:
"nome"
列的索引一次,除非您更改光标,否则它不会更改。moveToFirst()
会返回true
,如果没有,则会false
。与现有方法相比,写入速度更快,运行速度更快。
SimpleCursorAdapter是将数据从Cursor绑定到ListView的标准适配器。这将为您提供与原始方法相同的结果,但代码更少 如何使用SimpleCursorAdapter:
Cursor c = db.query("contatos", campos, null, null, null, null, "nome");
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, c,
new String[] {"nome"}, new int[] {android.R.id.text1});
user.setAdapter(adapter);
答案 1 :(得分:0)
假设ListView中使用的适配器具有自定义类型(我将其称为ContactInfo),则以下内容应该有效。
getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// Get String provided to this particular row
ContactInfo info = getListView().getAdapter().getItem(position);
// Construct title, message etc from information within info
showMessage("Contact Info", info);
}
});