質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

1313閲覧

Xamarin - 画面遷移元への値の渡し方

sezaki_H

総合スコア41

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2018/11/12 01:56

編集2018/11/14 02:24

Intentで値を渡しながら画面遷移をした際に戻り値を二つ設定したいのですが、OnActivityResultの使いかたがよく分かりません。
遷移先から戻った時にexpandablelistviewの指定リストに要素を追加する処理を行いたいのですが、別メソッドになるため扱い方が分からず困っています。
data.getExtra(キー)で値が取得できると思うのですが、OnActivityResultは返り値を二つ受け取ることができるのでしょうか?

(複数のアクティビティは使用してないのでrequestcodeは特に気にしていないのですが書いたほうが良いのでしょうか?)

c#

1//遷移 2 var intent = new Intent(this, typeof(memocreate)); 3 4 StartActivityForResult(intent,1);

c#

1//遷移先 2 var resultintent = new Intent(this, typeof(MainActivity)); 3 resultintent.PutExtra("Group", nl); 4 resultintent.PutExtra("name", name); 5 SetResult(Result.Ok, resultintent); 6 Finish();

c#

1//遷移元での処理 2 protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 3 4 { 5 if (requestCode == 1) 6 { 7 if (resultCode == Result.Ok) 8 { 9 10 11 var ne = data.GetIntExtra("Group", 0); 12 var na = data.GetStringExtra("name"); 13 if (ne == 0) 14 { 15 16 } 17 else if (ne == 1) 18 { 19 Toast.MakeText(this, na, ToastLength.Short).Show();//トーストで値(追加する要素名)の受け渡しは確認済み 20 21 var child = new JavaDictionary<string, object>() { ["CHILD_TITLE"] = na }; 22 Child1Elements.Add(child); 23 24 } 25 else if (ne == 2) 26 { 27 var child = new JavaDictionary<string, object>() { ["CHILD_TITLE"] = na }; 28 Child2Elements.Add(child); 29 } 30 } 31 } 32 33 adapter.NotifyDataSetChanged(); 34 35 36 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amay077

2018/11/12 02:40

「OnActivityResultについての質問」なのか「ExpandableListview についての質問」なのかが分からないです、質問は一つだけの方が回答が集まりやすいでしょう。前者だとしたら ne.GetIntExtra ne.GetStringExtra で可能と思います。後者は、「ExpandableListviewにデータを表示できる処理」があるなら、それを関数化して、その関数を OnActivityResult から呼び出す感じになると思います。
sezaki_H

2018/11/12 03:16

すいません、後から質問を加えてたらまとまりがなくなってしまいました。関数化を試してみます。
guest

回答1

0

ベストアンサー

data.getExtra(キー)で値が取得できると思うのですが、OnActivityResultは返り値を二つ受け取ることができるのでしょうか?

可能です。

C#

1protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 2{ 3 var ne = data.GetIntExtra("Group", 0); 4 var na = data.GetStringExtra("name"); 5 6 ... 7}

childElements.Addのchildで'Android.Runtime.JavaDictionary<string, object>' から'System.Collections.Generic.KeyValuePair<string, object>' へ変換することはできません。

Child1Elementsの型は何ですか?JavaList<IDictionary<string, object>>()になっているでしょうか?
また、追加しているchildは何者ですか。新しくリストの要素をつかするなら、新しいインスタンスを作ることになると思うのですが。

C#

1var child = new JavaDictionary<string, object>() {["CHILD_TITLE"] = na}; 2Child1Elements.Add(child);

adapterも別メソッドのためエラーが出ます

関数化でもいいですが、adapterをprivateフィールドにするのでもいいです。

C#

1public class MainActivity : Activity 2{ 3 private SimpleExpandableListAdapter adapter; 4 5 ... 6}

複数のアクティビティは使用してないのでrequestcodeは特に気にしていないのですが書いたほうが良いのでしょうか?

今後追加する可能性も考えられますし、作法みたいなものなので、resultCodeのチェックも含めて書いておいた方がいいと思います。

C#

1protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 2{ 3 if (requestCode == 1) 4 { 5 if (resultCode == Result.Ok) 6 { 7 8 } 9 } 10}

後、requestCodeをわかりやすく定数にしておいた方がいいです。

投稿2018/11/12 03:34

f-miyu

総合スコア1625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sezaki_H

2018/11/14 02:23

毎度詳しい回答ありがとうございます<m(__)m> リストへの要素追加がうまくいかないのですがなぜでしょうか...。 質問文を今のコードに更新したので見ていただけますか?
f-miyu

2018/11/14 02:34

Child1ElementsやChild2Elementsを定義している部分も書いてもらえますか?
sezaki_H

2018/11/14 02:44

privateフィールドで宣言していたのですが、OnCreate内の親リスト定義の部分にも定義文が残っていました。消したらうまくいきました。ありがとうございます<m(__)m>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問