1

我有一个格式为 Header + listview + footer 的自定义对话框。对应的代码如下:(我不介意分享代码但它超过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空指针错误。列表视图和对话框的 xml 如下:

盘点.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 回答