自定义对话框中的listview行不可见

时间:2012-11-18 17:44:20

标签: android android-layout

我有一个自定义对话框,格式为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();

在标题中,我有一个radiobutton,并打算控制listview行的可见性。所以,我有以下代码:...

    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如下:

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);”并且仍然有相同的空指针。

请提前帮助我,非常感谢!

开尔文

1 个答案:

答案 0 :(得分: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);