2019년 1월 27일 일요일

(자마린.안드로이드)Hello Xamarin.Android 멀티화면예제, 액티비티, 인텐트를 이용한 새창띄우기

(자마린.안드로이드)Hello Xamarin.Android 멀티화면예제, 액티비티, 인텐트를 이용한 새창띄우기
Hello Android MultiScreen Example
이전 Android_Hello 프로젝트에 전화건 내역을 저장하는 화면과 로직을 추가해 보자.
비주얼 스튜디오에서 이전에 작성한 Android_Hello 응용프로그램을 오픈하자.
[완성된 프로젝트 구조]
Resource/Layout아래의 activity_main을 오픈 후 도구상자(ToolBox)에서 Button을 드래그하여 Call Button 아래에 위치시킨 후 속성창에서 Id속성을@+id/CallHistoryButton”, Text 속성을 “@string/callHistory”로 설정한다.
n Resources/value 아래의 strings.xml파일을 오픈 후 Resources 안쪽에 아래코드를 삽입하자.
<string name="callHistory">CallHistory</string>
activity_main 화면에서 CallHistoryButton 선택후 enabled 속성을 false로(체크를 푼다.) 설정하면 디자인 화면에서 버튼이 비활성화 된다.
전화건 내역을 저장하는 두번째 화면을 위한 Activity를 생성하는데 프로젝트에 추가 -> 새항목에서 Visual C# -> Activity(동작)를 선택, 이름을 CallHistoryActivity.cs로 하고 아래 내용으로 코드를 채우자. (ListActivity를 상속받았음에 주의하자!, 별도의 UI이 *.axml 파일이 필요없다.)
n Android의 ListView를 사용하면 열거 가능한 컬렉션을 반복하고 각 데이터를 목록 항목에 표시 할 수 있다. 목록보기는 어댑터와 함께 작동하여 데이터를 반복하고 레이아웃에 데이터를 표시하는 구조디.
n 단순한 데이터를 화면에 표시하고자하는 경우 Android.Resource.Layout.SimpleListItem1과 같은 built-in list item layouts을 사용하면 된다.
MainActivity.cs 파일을 오픈해서 전화를 걸 때 전화번호를 저장하기 위한 List<string>를 위한 “System.Collections.Generic”을 import하고 phoneNumbers 라는 컬렉션 변수를 정의하자.
MainActivity의 OnCreate 메소드앞 SetContentView 뒤부분에 CallHistoryButton의 이벤트 핸들러를 작성하자. 혹시 Resource.Id.CallHistoryButton을 못찾으면 솔루션 탐색기에서 F5를 누른 후 다시해보자.
사용자가 “Make a Call을 클릭하고 “Call”을 클릭할 때 사용자 전화번호를 저장해 두기 위해 위에서 만든 켈렉션 변수 phoneNumbers에 저장하고 CallHistoryButton을 활성화하는 기능 추가를 위해 callDialog.SetNeutralButton를 수정하자.
[아래는 MainActivity.cs의 전체코드이다.]
using System;
using Android.App;
using Android.Content;
using Android.Widget;
using Android.OS;
using Android.Text;
using System.Collections.Generic;
namespace Android_Hello
{
[Activity(Label = "Xamarin Android",
MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
static readonly List<string> phoneNymbers = new List<string>();
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
Button callHistoryButton = FindViewById<Button>(Resource.Id.CallHistoryButton);
callHistoryButton.Click += (sender, e) =>
{
// 인텐트는 액티비티의 전환이 일어날 때 호출하거나 메시지를 전달하는 매개체
// 암시적 인텐트 : 전환될 곳을 직접 지정하지 않고 액션을 적어서 사용한다.
// 명시적 인텐트 : 전환될 액티비티를 직접 적어서 표현하는 방법을 사용한다.
var intent = new Intent(this, typeof(CallHistoryActivity));
// PutStringArrayExtra는 Intent에 전화 번호 목록을 첨부한다.
intent.PutStringArrayListExtra("phone_numbers", phoneNymbers);
StartActivity(intent);
};
EditText phoneNumberText =
FindViewById<EditText>(Resource.Id.PhoneNumberText);
//전화걸기 버튼
Button callButton = FindViewById<Button>(Resource.Id.CallButton);
callButton.Enabled = false;
phoneNumberText.TextChanged +=
(object sender, TextChangedEventArgs e) =>
{
if (!string.IsNullOrWhiteSpace(phoneNumberText.Text))
callButton.Enabled = true;
else
callButton.Enabled = false;
};
callButton.Click += (object sender, EventArgs e) =>
{
//Make a Call 버튼 클릭시 전화를 건다.
var callDialog = new AlertDialog.Builder(this);
callDialog.SetMessage("Call " + phoneNumberText.Text + "?");
//"Call"을 클릭하는 경우
// 전화걸기 위한 인텐트 생성
callDialog.SetNeutralButton("Call", delegate
{
phoneNymbers.Add(phoneNumberText.Text);
callHistoryButton.Enabled = true;
// 인텐트는 액티비티의 전환이 일어날 때 호출하거나 메시지를 전달하는 매개체
// 암시적 인텐트 : 전환될 곳을 직접 지정하지 않고 액션을 적어서 사용한다.
// 명시적 인텐트 : 전환될 액티비티를 직접 적어서 표현하는 방법을 사용한다.
var callIntent = new Intent(Intent.ActionCall);
callIntent.SetData(Android.Net.Uri.Parse("tel:" + phoneNumberText.Text));
StartActivity(callIntent);
});
//Cancel을 클릭하는 경우
callDialog.SetNegativeButton("Cancel", delegate { });
callDialog.Show();
};
}
}
}
실행 화면
 

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...