1

ヘッダー + リストビュー + フッターの形式のカスタム ダイアログがあります。対応するコードは次のとおりです: (コードを共有してもかまいませんが、800 行を超えています) ...

    /* Setup dialog layout */
View header = (View)getLayoutInflater().inflate(R.layout.stockcountheader, null);
View footer = (View)getLayoutInflater().inflate(R.layout.stockcountfooter, null);

    final Dialog listDialog;

    listDialog = new Dialog(this, android.R.style.Theme_Dialog);
    listDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    LayoutInflater li = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = li.inflate(R.layout.dialog, null, false);
    listDialog.setContentView(v);
    listDialog.setCancelable(true);

    final AdditemAdapter adapter = new AdditemAdapter(this, R.layout.additemrow, updateitems);
    final ListView filterrow = (ListView) listDialog.findViewById(R.id.dialoglist);
    filterrow.addHeaderView(header);
    filterrow.addFooterView(footer);
    filterrow.setAdapter(adapter);
    i = adapter.getCount();
    listDialog.show();

ヘッダーにはラジオボタンがあり、リストビュー行の可視性を制御するつもりです。だから、私は次のコードを持っています: ...

    radiostockresGroup = (RadioGroup)listDialog.findViewById(R.id.radiostockres);
    radiostockresButton = (RadioButton) radiostockresGroup.findViewById(radiostockresGroup.getCheckedRadioButtonId());
    radiostockresGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        public void onCheckedChanged(RadioGroup radiostockresGroup, int checkedId) {
            radiostockresButton = (RadioButton) radiostockresGroup.findViewById(checkedId);


            switch(checkedId) {
                case R.id.radioresno:

                    listDialog.findViewById(R.id.tblayout2).setVisibility(View.INVISIBLE);          
                    break;
                case R.id.radioresyes:                      

                    listDialog.findViewById(R.layout.tblayout2).setVisibility(View.VISIBLE);
                    break;
            }

        }
    });

ただし、「listDialog.findViewById(R.id.tblayout2).setVisibility(View.INVISIBLE);」行で Java null ポインター エラーが発生します。リストビューとダイアログの xml は次のとおりです。

stocktakerow.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TableLayout android:id="@+id/tblayout2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:shrinkColumns="0"
        android:stretchColumns="*">

        <TableRow 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">    

            <TextView android:id="@+id/txtfieldname"  
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content"
                android:layout_span="3" 
                android:gravity="top" />

            <EditText android:id="@+id/txtinput"  
                android:layout_toRightOf="@+id/txtfieldname"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_span="3" 
                android:gravity="top" />


        </TableRow>
    </TableLayout>      
</RelativeLayout>

「filterrow.findViewById(R.id.tblayout2).setVisibility(View.INVISIBLE);」を使用しようとしています それでも同じヌルポインターを取得しました。

よろしくお願いします。

ケルビン

4

1 に答える 1

0

コードを見ると、次のことがわかります。

final ListView filterrow = (ListView) listDialog.findViewById(R.id.dialoglist);
listDialog.findViewById(R.id.tblayout2).setVisibility(View.INVISIBLE); 

本質的に、それは とR.id.tblayout2同じもののメンバーであると言っていR.id.dialoglistます。私は彼らがこの場合ではないと思います。

あなたのクラスが何を拡張しているのかわからないので、これはうまくいくはずだとしか思えません。そうでない場合は、クラス定義を投稿していただけますか? public class MainActivity extends Activity {両方のクラスで同様の行が実行されます。

findViewById(R.id.tblayout2).setVisibility(View.INVISIBLE); 
于 2012-11-18T17:49:23.380 に答える