【问题标题】:make a call onItemClick in a List View在列表视图中调用 onItemClick
【发布时间】:2014-05-30 15:17:12
【问题描述】:

在我的 Android 应用程序中,我创建了一个包含 SQLite 数据库

(_id,FRIEND_NAME,FRIEND_PLACE(详细地址),FRIEND_PHONE,FRIEND_LOC(位置),FRIEND_CATEG)

我还实现了一个列表视图,它显示所有 FRIEND_NAME(来自数据库)。

当我点击他的名字时,我想给选定的朋友打电话。

幸运的是,尽管拨打了他的号码,应用程序始终拨打这个号码“74663”。

事实上,我认为问题出在变量“phone”的分配上,所以当我使用 (Intent.ACTION_CALL, Uri.parse(phone)) 时,它每次都会给出相同的数字(74663)(也许当它会“解析 uri”或在数据库列表视图的光标中)。

1) 问题出在哪里?

2) 为什么它总是给号码 74663 拨打

3) 你能(请)告诉我如何分配变量 phone 来获取点击的 FRIEND_NAME 的 FRIEND_PHONE 吗?

这是类的代码

    `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);

                }

                });
        }

}

【问题讨论】:

    标签: android sqlite uri phone-call onitemclick


    【解决方案1】:

    为姓名和电话创建两个单独的列表。

    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);
    

    【讨论】:

      【解决方案2】:

      显然你会给出相同的值。 使用getItemAtPosition(position); 获取您点击的确切项目。

      【讨论】:

      • 我应该在哪里使用它?在 onItemClick 之后它不起作用
      • 使用Object o = ListView.getItemAtPosition(position); String str=(String)o;//As you are using Default String Adapter Toast.makeText(getApplicationContext(),str,Toast.LENGTH_SHORT).show();
      • Thx suraj 对我的问题很感兴趣,但它也不起作用:无法从类型 AdapterView 对非静态方法 getItemAtPosition(int) 进行静态引用
      • 查看link
      • 还要注意我要拨打的朋友名字的号码点击不Toast它的名字....
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多