Custom Viewの値の受け渡し方法

833 views
Skip to first unread message

gami

unread,
Oct 9, 2013, 3:02:14 AM10/9/13
to android-g...@googlegroups.com
お世話になっています。

CustomViewについて質問です。現在CustomViewをxmlにて定義しており

<com.example.sample.CustomView
   android:id="@+id/CustomView"
   android:orientation="horizontal"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
   
xmlでは、下記の引数だけを所持するコンストラクタを作成する必要があると思うのですが
public CustomView(Context context, AttributeSet attrs)
public CustomView(Context context, AttributeSet attrs, list mlist)

のように値を受け渡しすることは可能のでしょうか?

CustomView mCustomView = new CustomView(context, attrs, list);
と記述し生成することでActivityから受け渡すことは可能だと思うのですが・・・なにぶんxmlで定義しているため

CustomView mCustomView = (CustomView)findViewById(R.id.CustomView);
という形でししか生成できません。

質問がうまくできなくて分かりにくいと思いますがどなたか解決方法をご教授できませんか?
よろしくお願いします。

Hirokazu Fukami

unread,
Oct 9, 2013, 3:09:19 AM10/9/13
to android-g...@googlegroups.com
こんにちはfkmです。

ちょっと自分でやったことないのでできなかったらごめんなさいですが、
確か独自のattributeを作成できたと思います。

ここが参考になるかもです(XML、間違ってますが。。。
http://qiita.com/satoo1106/items/7e0130a12cd3b6c51540


2013/10/9 gami <sakaga...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
-------------------------------------------------------------
深見 浩和(Hirokazu Fukami)

URI:http://www.fkmsoft.jp
email: f...@fkmsoft.jp

gami

unread,
Oct 9, 2013, 4:03:02 AM10/9/13
to android-g...@googlegroups.com
fkmさん。いつもお早いpostありがとうございます。

私の質問が悪かったです。申し訳ありません。

ActivitiyからCustomViewを生成するときに値を受け渡すと同時にCustomViewの生成ができないかいう事です?。

独自のgetメソッドを作成しCustomViewに無理やり値を受け渡そうとすると下記のようなエラーが出ます。
 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sample/com.example.sample.Activity}: android.view.InflateException: Binary XML file line #27: Error inflating class com.example.sample.CustomView

多分ですが、CustomViewが生成される前にActivitiyの値を受け取れていないためエラーが発生します。

Hirokazu Fukami

unread,
Oct 9, 2013, 4:10:35 AM10/9/13
to android-g...@googlegroups.com
こんにちはfkmです。

XMLファイルの27行目に問題があるよー
というエラーなので、まずはそちらを修正するのが先では。。。?

CustomViewのコンストラクタは、
public CustomView(Context context, AttributeSet attrs)
になっていますか?


2013/10/9 gami <sakaga...@gmail.com>:

Makoto Yamazaki

unread,
Oct 9, 2013, 4:30:33 AM10/9/13
to android-g...@googlegroups.com
zaki です。

findViewById は生成ではなく、単にすでに存在してる View を id で探してくるだけです。
fkm さんのいうように カスタム attribute を定義してlayout XML に追加の情報を記述するか
layout XML には書かずにコードから new して自分で add するか、 findViewById で取ってきた
ものに setter でわたすというのが通常の方法です。

通常ではない方法として、 Activity#onCreateView をオーバーライドして自分で生成する
処理を書くという方法もないことはないのですが、まったくおすすめしません。
これは FragmentActivity が layout XML に既述された fragment タグを処理する際に
使うような特殊な方法です。



2013/10/9 gami <sakaga...@gmail.com>

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
YAMAZAKI Makoto

gami

unread,
Oct 9, 2013, 4:33:43 AM10/9/13
to android-g...@googlegroups.com
>XMLファイルの27行目に問題があるよー 
はい、そうなんです。ですがコンストラクタは下記のようになっています。
public CustomView(Context context, AttributeSet attrs) 

エラーが出た時のコードは下記です。

ActivityのonCreateメソッドのなかでCustomViewを生成する。
CustomView mCustomView = (CustomView)findViewById(R.id.CustomView);//そもそもこれは特に必要ない

Activityの中でgetメソッドを作成しておく
public 型 get(){
return this.値;
}

CustomViewのコンストラクタのなかで
public CustomView(Context context, AttributeSet attrs) {


mActivity = (Activity)context;

//こういうふうにActivityの値を受け取りたい。
mActivity.get();

}
これが叶わないので、初期質問のようにできないかと思いました。
しかし、値さえ受け渡せるのであればどんな方法でもかまいません。

On Wednesday, October 9, 2013 4:02:14 PM UTC+9, gami wrote:

gami

unread,
Oct 9, 2013, 4:47:13 AM10/9/13
to android-g...@googlegroups.com
zaki さん。

その通りです生成ではないです。お恥ずかしい。

私の書き方がまずいのかgetter とsetterを駆使しても上記のようなエラーがでます。


On Wednesday, October 9, 2013 4:02:14 PM UTC+9, gami wrote:
Reply all
Reply to author
Forward
0 new messages