сделать вызов onItemClick в представлении списка

В моем приложении для Android я создал базу данных SQLite, содержащую

(_id, FRIEND_NAME, FRIEND_PLACE(подробный адрес), FRIEND_PHONE, FRIEND_LOC(местоположение), FRIEND_CATEG)

Также я реализовал представление списка, в котором отображаются все имена FRIEND_NAME (из базы данных).

Я хочу позвонить выбранному другу, когда я нажму на его имя.

К сожалению, несмотря на то, что он звонит на его номер, приложение всегда звонит на этот номер «74663».

На самом деле, я думаю, что проблема заключается в назначении переменной «телефон», поэтому, когда я использую (Intent.ACTION_CALL, Uri.parse(phone)) , он каждый раз дает один и тот же номер (74663) (возможно, когда он это делает) parse uri" или в курсоре списка базы данных).

1) Где проблема?

2) Почему всегда выдает номер 74663 для набора

3) не могли бы вы (пожалуйста) сказать мне, как назначить переменную phone, чтобы получить FRIEND_PHONE нажатого FRIEND_NAME?

это код класса

    `package com.softeq.prepopdb.activity;

import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.softeq.android.prepopdb.R;
import com.softeq.prepopdb.dbhelper.ExternalDbOpenHelper;`        



//������� ��������� �������� ������� ���� ����� �� 


public class PrepopSqliteDbActivity extends ListActivity {
private static final String DB_NAME = "yourdb.sqlite";

private static final String TABLE_NAME = "friends";
private static final String FRIEND_ID = "_id";
private static final String FRIEND_NAME = "name";
public static final String FRIEND_PLACE = "place";
public static final String FRIEND_PHONE = "phone";
public static final String FRIEND_LOC = "loc";
public static final String FRIEND_CATEG = "categ";

private SQLiteDatabase database;
private ListView listView;
private ArrayList<String> friends;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //��� �������� ������
    ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
    database = dbOpenHelper.openDataBase();
    //��� ���� ����������
    fillFreinds();
    setUpList();      
}
//filling the list with friends// 
private void fillFreinds() {
    friends = new ArrayList<String>();
    Cursor friendCursor = database.query(TABLE_NAME,
            new String[] 
                     {FRIEND_ID, FRIEND_NAME,FRIEND_PLACE,FRIEND_PHONE,FRIEND_LOC,FRIEND_CATEG},
                     null, null,null,null, FRIEND_CATEG);

    friendCursor.moveToFirst();
    if(!friendCursor.isAfterLast()) {
        do {
            String name = friendCursor.getString(1);
            String phone= friendCursor.getString(3);
            friends.add(name);
            friends.add(phone);
            } while (friendCursor.moveToNext());
    }
    friendCursor.close();
}

//setting up the list to call (or dial) a friend's number onItemClick  

private void setUpList() {

    setListAdapter(new ArrayAdapter<String>(this,android.R.layout. simple_expandable_list_item_1 , friends));
    listView = getListView();
    listView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,int position,long id) {

                    String phone = "tel:" + FRIEND_PHONE.toString().trim();
                    Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(phone));
                    startActivity(i);

                }

                });
        }

}

person M.M.Rame    schedule 30.05.2014    source источник


Ответы (2)


Создайте два отдельных списка для имен и телефонов.

ArrayList<String> names;
ArrayList<String> phones;

Измените эту часть кода:

do {
        String name = friendCursor.getString(1);
        String phone = friendCursor.getString(3);
        names.add(name);
        phones.add(phone);
} while (friendCursor.moveToNext());

Установите names в качестве источника данных вашего адаптера.

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, names));

И получить доступ к соответствующему номеру телефона в списке следующим образом:

String phone = "tel:" + phones.get(position);
Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(phone));
startActivity(i);
person Rafi Kamal    schedule 31.05.2014

Очевидно, вы дадите такое же значение. используйте getItemAtPosition(position);, чтобы получить точный элемент, на который вы нажали.

person suraj shukla    schedule 30.05.2014
comment
где я должен использовать это? после onItemClick это не сработало - person M.M.Rame; 30.05.2014
comment
используйте 1_ - person suraj shukla; 30.05.2014
comment
Спасибо, suraj, за интерес к моему вопросу, но это тоже не сработало: невозможно сделать статическую ссылку на нестатический метод getItemAtPosition(int) из типа AdapterView‹ListAdapter› - person M.M.Rame; 30.05.2014
comment
проверьте эту ссылку - person suraj shukla; 30.05.2014
comment
также обратите внимание, что я хочу позвонить по номеру имени друга, щелкнув его, а не тост его имени .... - person M.M.Rame; 30.05.2014
comment
лучше использовать специальный адаптер для этого. тогда вы сможете получить телефонный номер точного местоположения, а также сможете позвонить по номеру - person suraj shukla; 30.05.2014
comment
индивидуальный адаптер также не подходит, потому что номер телефона не должен отображаться в списке (я делаю это, пытаясь сделать текст... toString, но также не работает) я проверил ссылку, которую вы ему дали я: я все еще в замешательстве - person M.M.Rame; 30.05.2014
comment
используйте пользовательский адаптер и пользовательский список. это решит большую часть проблемы. - person suraj shukla; 30.05.2014