ここAndroid/Javaの初心者ですが、C /C++とObjectPascalで十分に確立されています。5つのImageButtonがあり、1つだけが有効になっています。次に、唯一の有効化ボタンが押されたある時点で、ブール値(enableBtn2..3など)とともに渡されたsetEnabled()を呼び出すことにより、他の4つも有効化されるはずです。しかし、唯一の有効なボタンを押してメンバーnewRung()を呼び出し、次に別のメンバーrefreshMnuButtons()を呼び出すと、setEnabled()親クラスメンバーの呼び出しによって発生したと思われる例外が発生します。抜け穴を指摘しますか?必死に説明を探しましたが、適切な答えが見つからないようです。添付されている私のコードをご覧ください。
public class MyActivity extends Activity {
private ImageView cell1,cell2,cell3,cell4,cell5,cell6,rungClose;
private ImageButton mnuBtn1,mnuBtn2,mnuBtn3,mnuBtn4,mnuBtn5;
private boolean enableBtn1 = true,
enableBtn2 = false,
enableBtn3 = false,
enableBtn4 = false,
enableBtn5 = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pic_ladder_main);
// setup toolbar
TableLayout tbl = (TableLayout)findViewById(R.id.tblToolbar);
ImageButton mnuBtn1 = new ImageButton(this);
mnuBtn1.setImageResource(R.drawable.rungopentool);
mnuBtn1.setEnabled(enableBtn1);
//setup mnuBtn1 listener
mnuBtn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
newRung();
}
});
ImageButton mnuBtn2 = new ImageButton(this);
mnuBtn2.setImageResource(R.drawable.noc);
mnuBtn2.setEnabled(enableBtn2);
//setup mnuBtn2 listener
mnuBtn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNOC();
}
});
final ImageButton mnuBtn3 = new ImageButton(this);
mnuBtn3.setImageResource(R.drawable.ncc);
mnuBtn3.setEnabled(enableBtn3);
//setup mnuBtn3 listener
mnuBtn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNCC();
}
});
ImageButton mnuBtn4 = new ImageButton(this);
mnuBtn4.setImageResource(R.drawable.process);
mnuBtn4.setEnabled(enableBtn4);
//setup mnuBtn4 listener
mnuBtn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addProcess();
}
});
ImageButton mnuBtn5 = new ImageButton(this);
mnuBtn5.setImageResource(R.drawable.coil);
mnuBtn5.setEnabled(enableBtn5);
//setup mnuBtn5 listener
mnuBtn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addCoil();
}
});
TableRow mnurow = new TableRow(this);
mnurow.setBackgroundColor(0x3F000000);
// display menu
mnurow.addView(mnuBtn1);
mnurow.addView(mnuBtn2);
mnurow.addView(mnuBtn3);
mnurow.addView(mnuBtn4);
mnurow.addView(mnuBtn5);
tbl.addView(mnurow);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_pic_ladder_main, menu);
return true;
}
private void createRungImages() {
// TODO
}
private void newRung()
{
Toast.makeText(this, "New Rung" ,Toast.LENGTH_SHORT).show();
enableBtn2 = true;
enableBtn3 = true;
enableBtn4 = true;
enableBtn5 = true;
enableBtn1 = false;
refreshMnuButtons();
}
private void addNOC()
{
Toast.makeText(this, "NOC" ,Toast.LENGTH_SHORT).show();
}
private void addNCC()
{
Toast.makeText(this, "NCC" ,Toast.LENGTH_SHORT).show();
}
private void addProcess()
{
Toast.makeText(this, "Add Process" ,Toast.LENGTH_SHORT).show();
}
private void addCoil()
{
Toast.makeText(this, "Coil" ,Toast.LENGTH_SHORT).show();
}
public void refreshMnuButtons()
{
try {
mnuBtn1.setEnabled(enableBtn1);
mnuBtn2.setEnabled(enableBtn2);
mnuBtn3.setEnabled(enableBtn3);
mnuBtn4.setEnabled(enableBtn4);
mnuBtn5.setEnabled(enableBtn5);
}
catch(Exception e) {Toast.makeText(this, "Exception" ,Toast.LENGTH_SHORT).show(); }
}
}
これが私のxmlです:ほとんどのグラフィック要素をコードで生成しようとしていることに注意してください。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="false"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="44dp" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TableLayout
android:id="@+id/ladderSheet"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TableLayout>
</ScrollView>
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<HorizontalScrollView
android:id="@+id/horizontalScrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TableLayout
android:id="@+id/tblToolbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbarStyle="outsideInset"
android:scrollbars="horizontal" >
</TableLayout>
</HorizontalScrollView>
</RelativeLayout>
</RelativeLayout>
前もって感謝します!