私はAndroidプログラミングに比較的慣れていません。このトピックについて多くのスレッドを調べましたが、言及されている解決策はどれもうまくいきません。ここに私がしようとしているものがあります。XML ファイルを使用してレイアウト リソースを作成しようとしていますが、MainActivity で setContentView(R.layout.activity_main) を実行します。次に、Activity_main.xml ファイルで定義されているデフォルトのレイアウトを変更しようとするビューを拡張するカスタム ビュー クラスがあります。ただし、別のファイルに実装されているカスタム ビューで (レイアウト ファイル activity_main.xml から) findViewById(R.id.) を使用してビュー ID を取得しようとすると、常に null になります。findViewById(...) で MainActivity クラスの id を取得しようとすると、適切な値が取得されます。
ここで何が間違っていますか?
ここにすべてのコードスニペットがあります
ありがとう
ここにファイル「MainActivity.java」があります
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyView myView = new MyView(this, null);
....
ここにファイル MyView.java があります
public class MyView extends View {
public static final String DEBUG_TAG = "MYVIEW" ;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
View tablerow1 = (TableRow) findViewById (R.id.tableRow) ;
Log.v(DEBUG_TAG," tablerow1 = " + tablerow1 + "\n");
}
そして、ここにファイル activity_main.xml があります
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/top_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TableLayout
android:id="@+id/tableLayout1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:background="@color/red"
android:shrinkColumns="*"
android:stretchColumns="*" >
<TableRow
android:id="@+id/tableRow1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="center_horizontal">
<Button
android:id="@+id/button_00_1"
android:text="@string/button_1"
android:textStyle="bold"
android:background="@color/green"
android:layout_margin="0.5dp"
android:layout_width="0dp"
android:layout_weight="0.5"
android:typeface="serif"></Button>
</TableRow>
</TableLayout>
</LinearLayout>
MyView.java の findViewById(...) 呼び出しは常に null を返しますが、それを MainActivity.java ファイルに含めると、null 以外の適切な値が得られます。
誰かがここで間違っていることを指摘できますか?
ありがとう