0

連絡先情報(名前、電話番号)を含む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);

それは私のリストビュー/アダプターのコードです

OBS:説明できればもっと良い(tutsリンクなし(可能であればもっと良い))

4

2 に答える 2

1

(カーソルを自分で処理していて、ArrayAdapterを使用していることがわかります。これは、SimpleCursorAdapterが自動的に行うことを理解してください。以下の私のメモを参照してください。)

とにかく、カーソルをクラス変数に変更して、これを次のように追加してみてください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"1回だけで、カーソルを変更しない限り変更されません。
  • moveToFirst()true読み取るデータがある場合とない場合に戻りますfalse

これは、既存のメソッドよりも記述と実行が高速です。


SimpleCursorAdapterは、カーソルからリストビューにデータをバインドするための標準アダプターです。これにより、元のメソッドと同じ結果が得られますが、コードははるかに少なくなります。
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);
于 2012-09-18T18:40:23.000 に答える
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);
    }
});
于 2012-09-18T18:29:45.030 に答える