teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

参考urlを追記しました

2017/12/06 16:35

投稿

hiramekun
hiramekun

スコア428

answer CHANGED
@@ -10,6 +10,9 @@
10
10
  ```
11
11
  基本的に、ViewはActivityがなんであるかを知りません。これはインターフェースを考える上で重要ですね。例えばですが、他のActivityからTestViewをもしも使いたくなった時に、TestViewがMainActivityに依存していると実装をやり直さなければなりません。
12
12
  そこで、そもそもとして**Viewの中に特定のActivityを持たせない**のが基本方針になります。
13
+ 参考url: [疎結合って何?](http://blog.codebook-10000.com/entry/20131108/1383907001)
14
+ > ソフトウェアの拡張性とは「いかに変更に容易に適応できるかどうか」である。
15
+ 依存関係が多いと、あるプログラムの変更が他のプログラムに影響を及ぼし、変更を行うごとに大量のテストが必要になる。
13
16
 
14
17
  ## 具体的な解決策
15
18
  ではどうすれば良いのでしょうか???
@@ -26,6 +29,7 @@
26
29
 
27
30
  ```
28
31
  そして、これを`NextActivity`の側から呼び出します。(Intentの受け取りは他の回答の通りに修正し、受け取れているとします。)
32
+ 参考url: [AndroidのViewに絵を描く](https://qiita.com/nittyan/items/62539b190e4dac89ec71)
29
33
  NextActivity
30
34
  ```java
31
35
  @Override

1

見出しを加えました。

2017/12/06 16:35

投稿

hiramekun
hiramekun

スコア428

answer CHANGED
@@ -1,6 +1,9 @@
1
+ ## まずは結論
1
2
  設計を変えた方が良いと思います。
3
+ TestViewの中にupdateViewのようなメソッドを定義し、その引数にdataを入れて渡してあげます。
2
4
  ActivityやIntentの扱いに関しては他のお二方のおっしゃる通りですので、そちらを参考になさってください。
3
5
 
6
+ ## 問題点
4
7
  問題はTestViewの中の以下の部分です。
5
8
  ```java
6
9
  canvas.drawLine(ma.data1[0], ma.data1[1], ma.data1[2], 630, paint); //ここがエラー
@@ -8,6 +11,7 @@
8
11
  基本的に、ViewはActivityがなんであるかを知りません。これはインターフェースを考える上で重要ですね。例えばですが、他のActivityからTestViewをもしも使いたくなった時に、TestViewがMainActivityに依存していると実装をやり直さなければなりません。
9
12
  そこで、そもそもとして**Viewの中に特定のActivityを持たせない**のが基本方針になります。
10
13
 
14
+ ## 具体的な解決策
11
15
  ではどうすれば良いのでしょうか???
12
16
  それは、View側にActivityからデータを渡してあげるのです。
13
17
  ここが重要で、質問者様は「ViewからActivityのデータを取りに行く」コードを書いていますが、「ActivityからViewにデータを渡す」のです。
@@ -34,8 +38,10 @@
34
38
 
35
39
  // TestViewのインスタンス取得
36
40
  testView = (TestView) this.findViewById(R.id.test_view);
37
- // ここでデータをTextViewに付与する。
41
+ // ここでデータをTestViewに付与する。
38
42
  testView.updateView(data);
39
43
  }
40
44
 
41
- ```
45
+ ```
46
+
47
+ おそらく以上の説明だけだと不明な点も多々あると思うので、その都度質問頂ければと思います。