Java 在Android应用程序中选择时以编程方式调用

Java 在Android应用程序中选择时以编程方式调用,java,android,xml,Java,Android,Xml,我正在做一个Android应用程序,我想显示旅行联系人号码。代码如下: AppActivity.java: package com.example.android; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.Button; import android.view.View; import android.view.View

我正在做一个Android应用程序,我想显示旅行联系人号码。代码如下:

AppActivity.java:

package com.example.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;

public class AppActivity extends Activity {
    Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent i=new Intent(AppActivity.this, App2Activity.class);
                i.putExtra("name1","Travels1");
                i.putExtra("number1","7843564358");
                i.putExtra("name2","Travels2");
                i.putExtra("number2","7664764358");
                i.putExtra("name3","Travels3");
                i.putExtra("number3","8804764358");
                startActivity(i);
            }
        });
    }
}
package com.example.android;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class App2Activity extends Activity {
    TextView textView;
    Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

        final Button btnOne = (Button) findViewById(R.id.btnOne);
        final Button btnTwo = (Button) findViewById(R.id.btnTwo);
        final Button btnThree = (Button) findViewById(R.id.btnThree);

        String name1=getIntent().getStringExtra("name1");
        String number1=getIntent().getStringExtra("btnOne");
        String name2=getIntent().getStringExtra("name2");
        String number2=getIntent().getStringExtra("btnTwo");
        String name3=getIntent().getStringExtra("name3");
        String number3=getIntent().getStringExtra("btnThree");

        btnOne.setText(number1);
        btnTwo.setText(number2);
        btnThree.setText(number3);

        //textView = (TextView)findViewById(R.id.textView1);
        //textView.setText(name1 + "-" + number1 + " " + name2 + "-" + number2 + " " + name3 + "-" + number3);

        // set button texts from intent data here with getIntent()

        btnOne.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent callIntent = new Intent(Intent.ACTION_DIAL);
                callIntent.setData(Uri.parse("tel:"+btnOne.getText()));
                startActivity(callIntent);
            }
        });

        btnTwo.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent callIntent = new Intent(Intent.ACTION_DIAL);
                callIntent.setData(Uri.parse("tel:"+btnTwo.getText()));
                startActivity(callIntent);
            }
        });

        btnThree.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent callIntent = new Intent(Intent.ACTION_DIAL);
                callIntent.setData(Uri.parse("tel:"+btnThree.getText()));
                startActivity(callIntent);
            }
        });
    }
}
App2Activity.java:

package com.example.android;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;

public class AppActivity extends Activity {
    Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent i=new Intent(AppActivity.this, App2Activity.class);
                i.putExtra("name1","Travels1");
                i.putExtra("number1","7843564358");
                i.putExtra("name2","Travels2");
                i.putExtra("number2","7664764358");
                i.putExtra("name3","Travels3");
                i.putExtra("number3","8804764358");
                startActivity(i);
            }
        });
    }
}
package com.example.android;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class App2Activity extends Activity {
    TextView textView;
    Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

        final Button btnOne = (Button) findViewById(R.id.btnOne);
        final Button btnTwo = (Button) findViewById(R.id.btnTwo);
        final Button btnThree = (Button) findViewById(R.id.btnThree);

        String name1=getIntent().getStringExtra("name1");
        String number1=getIntent().getStringExtra("btnOne");
        String name2=getIntent().getStringExtra("name2");
        String number2=getIntent().getStringExtra("btnTwo");
        String name3=getIntent().getStringExtra("name3");
        String number3=getIntent().getStringExtra("btnThree");

        btnOne.setText(number1);
        btnTwo.setText(number2);
        btnThree.setText(number3);

        //textView = (TextView)findViewById(R.id.textView1);
        //textView.setText(name1 + "-" + number1 + " " + name2 + "-" + number2 + " " + name3 + "-" + number3);

        // set button texts from intent data here with getIntent()

        btnOne.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent callIntent = new Intent(Intent.ACTION_DIAL);
                callIntent.setData(Uri.parse("tel:"+btnOne.getText()));
                startActivity(callIntent);
            }
        });

        btnTwo.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent callIntent = new Intent(Intent.ACTION_DIAL);
                callIntent.setData(Uri.parse("tel:"+btnTwo.getText()));
                startActivity(callIntent);
            }
        });

        btnThree.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent callIntent = new Intent(Intent.ACTION_DIAL);
                callIntent.setData(Uri.parse("tel:"+btnThree.getText()));
                startActivity(callIntent);
            }
        });
    }
}
main.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Travels and Holidays" />

</LinearLayout>
当我点击“旅行和假期”按钮时,它直接进入呼叫选项,呼叫号码是
7843564358766647643588804764358

我想要的是:当点击“旅行和假期”按钮时,它应该显示:

Travels1-7843564358   Call symbol
Travels2-7664764358   Call symbol
Travels3-8804764358   Call symbol
当我点击任何旅行的呼叫时,应该会转到该号码的呼叫


我哪里做错了

问题

您将直接重定向到拨号程序,因为在创建第二个活动时会启动呼叫意图

这个长号码的原因是一个textview存储了所有的电话号码。在调用意图中,传递完整的文本视图

解决方案

为了防止出现这种情况,您应该在第二个活动的布局文件中添加3个按钮(其中一个按钮存储一个电话号码),并通过按钮中存储的电话号码(按钮文本)在按钮单击侦听器中启动意图

将三个新按钮添加到布局文件(由第二个活动使用)后,将onCreate方法修改为类似以下内容:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnOne = (Button)findViewById(R.id.button1);
    btnTwo = (Button)findViewById(R.id.button2);
    btnThree = (Button)findViewById(R.id.button3);

    // set button texts from intent data here with getIntent()

    btnOne.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent callIntent = new Intent(Intent.ACTION_DIAL);
            callIntent.setData(Uri.parse("tel:"+btnOne.getText()));
            startActivity(callIntent);
        }
    });

    btnTwo.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent callIntent = new Intent(Intent.ACTION_DIAL);
            callIntent.setData(Uri.parse("tel:"+btnTwo.getText()));
            startActivity(callIntent);
        }
    });

    btnThree.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent callIntent = new Intent(Intent.ACTION_DIAL);
            callIntent.setData(Uri.parse("tel:"+btnThree.getText()));
            startActivity(callIntent);
        }
    });
}
编辑:添加了完整代码

好的,我在电脑上对应用程序进行了编码,代码如下:

MainActivity.java

public class MainActivity extends Activity{

Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent i=new Intent(MainActivity.this, SecondActivity.class);
            i.putExtra("name1","Travels1");
            i.putExtra("number1","7843564358");
            i.putExtra("name2","Travels2");
            i.putExtra("number2","7664764358");
            i.putExtra("name3","Travels3");
            i.putExtra("number3","8804764358");
            startActivity(i);
        }
    });   
}
public class SecondActivity extends Activity {

Button btnOne, btnTwo, btnThree;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    btnOne = (Button)findViewById(R.id.btnOne);
    btnTwo = (Button)findViewById(R.id.btnTwo);
    btnThree = (Button)findViewById(R.id.btnThree);

    // you dont need the names here, but maybe later
    String name1=getIntent().getStringExtra("name1");
    String name2=getIntent().getStringExtra("name2");
    String name3=getIntent().getStringExtra("name3");

    String number1=getIntent().getStringExtra("number1");
    String number2=getIntent().getStringExtra("number2");
    String number3=getIntent().getStringExtra("number3");

    btnOne.setText(number1);
    btnTwo.setText(number2);
    btnThree.setText(number3);

    btnOne.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent callIntent = new Intent(Intent.ACTION_DIAL);
            callIntent.setData(Uri.parse("tel:"+btnOne.getText()));
            startActivity(callIntent);
        }
    });

    btnTwo.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent callIntent = new Intent(Intent.ACTION_DIAL);
            callIntent.setData(Uri.parse("tel:"+btnTwo.getText()));
            startActivity(callIntent);
        }
    });

    btnThree.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent callIntent = new Intent(Intent.ACTION_DIAL);
            callIntent.setData(Uri.parse("tel:"+btnThree.getText()));
            startActivity(callIntent);
        }
    });
}
}

活动\u main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
    android:id="@+id/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Travels and Holidays" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<Button
    android:id="@+id/btnOne"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 <Button
    android:id="@+id/btnTwo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 <Button
    android:id="@+id/btnThree"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 </LinearLayout>
}

活动\u second.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
    android:id="@+id/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Travels and Holidays" />

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<Button
    android:id="@+id/btnOne"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 <Button
    android:id="@+id/btnTwo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 <Button
    android:id="@+id/btnThree"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge" />

 </LinearLayout>

仅供参考:您收到强制转换异常的原因是因为您在activity_second.xml中有三个视图,其中textView和您将其强制转换为按钮

我希望它现在能帮助你

这个怎么样

显示一个
警报对话框
或一个
弹出窗口
(查找教程),其中有一个包含要显示的项目的
列表视图
。您不需要启动任何新的
Acitivity
将值作为
附加值传递。相反,您可以创建一个POJO,例如
Contact
,例如:

public class Contact {

    String name;
    String phone;

    public Contact(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }

    @Override
    public String toString() {
        return this.name + "-" + this.phone;
    }
}
接下来,将数据填充到例如,
final ArrayList list=new ArrayList()

list.add(新联系人(name1,number1))

我使用的是
AlertDialog
实例,但您可以在
AppActivity中使用
PopupWindow

button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(App2Activity.this);
    AlertDialog alertDialog = dialogBuilder.create();
    LayoutInflater inflater = App2Activity.this.getLayoutInflater();
    View view = inflater.inflate(R.layout.alert_list, null);
    alertDialog.setView(view);
    ListView lv = (ListView) view.findViewById(R.id.listPhone);
    lv.setAdapter(new ArrayAdapter<Contact>(App2Activity.this, R.layout.alert_list_item, R.id.phoneItem,
            list));

    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent callIntent = new Intent(Intent.ACTION_DIAL);
            Object obj = parent.getItemAtPosition(position);
            if (obj instanceof Contact) {
                Contact contact = (Contact) obj;
                callIntent.setData(Uri.parse("tel:" + contact.phone));
                startActivity(callIntent);
            }
        }
    });
    alertDialog.show();
}
button.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
AlertDialog.Builder dialogBuilder=新建AlertDialog.Builder(App2Activity.this);
AlertDialog AlertDialog=dialogBuilder.create();
LayoutInflater充气器=App2Activity.this.getLayoutInflater();
视图=充气机。充气(R.layout.alert\u列表,空);
alertDialog.setView(视图);
ListView lv=(ListView)view.findViewById(R.id.listPhone);
lv.setAdapter(新阵列适配器)(App2Activity.this、R.layout.alert\u list\u项、R.id.phoneItem、,
名单),;
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
意向callIntent=新意向(意向.行动拨号);
Object obj=parent.getItemAtPosition(位置);
if(触点的obj实例){
触点触点=(触点)obj;
setData(Uri.parse(“tel:+contact.phone”);
星触觉;
}
}
});
alertDialog.show();
}
}))

使用
列表视图设计您的
R.layout.alert\u列表
。设计您的
R.layout.alert\u list\u项目
,例如,使用
TextView
ImageView
水平对齐,其中
ImageView
具有手机图标(下载任何手机图标,可能来自)


你们都准备好了

这应该在App2Activity或AppActivity中?我看到这应该在App2Activity中。我仍然没有从您的示例中得到我的代码应该是什么。是的,它应该在App2Activity中(这就是我所说的“第二个活动”)。代码现在几乎可以工作了。只需将两行“textview=(textview)findById(…)”和“textview.setText(…)”替换为将电话号码设置为按钮文本的三行:
btnOne.setText(number1)和其他两个按钮相同。如果它起作用,那么您可以考虑如何添加iconbtnOne=(Button)findviewbyd(R.id.button1);btnTwo=(按钮)findViewById(R.id.button2);btntree=(按钮)findViewById(R.id.button3);-这三行,我需要在R.java中为btnOne、btnTwo、btntree创建一个id。但我不能这样做?java再次修改重新生成的版本是的,您应该将它们添加到main2布局中。(=在布局中拖动3个按钮)生成ID。我仍然没有从您的示例中获得我的代码应该是什么。您没有掌握哪一部分?实际上,您编写的变量不同,我在代码中编写的变量也不同。所以我很困惑我应该把你的代码放在哪里我能看到的唯一区别是引入了(1)Contact类,你可以自己创建一个单独的java文件。其构造接受、名称和电话号码对。(2) 单击
按钮的
内的AlertDialog
。它有
R.layout.alert_list
,您需要使用
ListView
创建一个新文件,正如我前面提到的。你还有什么问题?