AlertDialog嵌套Listview显示textView点击空白区域没反应

我的项目需要在AlertDialog中显示一组书目,需要在AlertDialog中嵌套Listview显示Textview,可是发现一个问题,点击Textview中书名条目的空白区域无响应。只有点击书名文字才可以,初步怀疑是焦点问题,根据网上的资料都做过,问题依旧。最后发现一个奇怪的问题,Textview书名条目较少,即一个屏幕能全部展示,不需要Listview滚动的情况下,都正常,如果超过数量,上滑进入屏幕的条目是正常的,上滑划出屏幕再下滑进来的又正常了。由于我设置的文本居中,所以一眼就能看出来。我怀疑是在convertView这里出的问题。无论怎么改都不行。
但我使用Activity直接显示Listview,ListView项目中的Textview点击空白区域就没问题,
目前无奈的解决办法是不做居中,就左对齐,书名后面加好多空格加大宽度填满lisitview的item,但这样总觉得不好。

上代码各位看看。代码简单,就一个MainActivity 和xml

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayList<String> booklist=new ArrayList<>();
        for(int i=0;i<20;i++) booklist.add("mybook__"+i);

        ListView listview=new ListView(this);
        listview.setAdapter(new BaseAdapter() {
            @Override
            public int getCount() {
                return booklist.size();
            }
            @Override
            public String getItem(int position) {
                return booklist.get(position);
            }
            @Override
            public long getItemId(int position) {
                return position;
            }
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                if(convertView==null){
                    TextView textView=new TextView(MainActivity.this);
                    textView.setGravity(Gravity.CENTER_HORIZONTAL);
                    ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
                    textView.setLayoutParams(params);
                    textView.setTextSize(20);
                    textView.setPadding(30, 30, 30, 30);
                    convertView = textView;
                }
                TextView tview = ((TextView) convertView);
                tview.setText(getItem(position));
                return convertView;
            }
//上面是动态生成Textview,下面注释掉的这个getView使用布局文件,都是同样的问题。
/*            public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder holder;
                if(convertView==null){
                    convertView= LayoutInflater.from(MainActivity.this).inflate(R.layout.item_name,parent,false);
                    holder = new ViewHolder();
                    holder.text = (TextView) convertView.findViewById(R.id.text2);
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();

                }
                holder.text.setText(booklist.get(position));
                return convertView;
            }
            class ViewHolder {
                TextView text;
            }*/

        });
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(listview);
        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            }
        });

        AlertDialog dialog = builder.create();
        dialog.setCanceledOnTouchOutside(true);
        dialog.show();

    }
}

布局文件item_name.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="blocksDescendants"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/text2"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:focusable="false"
        android:textSize="30sp"
        android:textColor="@color/black"
        android:gravity="center_vertical|center_horizontal"/>

</LinearLayout>

根据网上有人说的,根布局加android:descendantFocusability="blocksDescendants"
所有子布局加android:focusable="false",或者动态setFocusable(false)添加都不行。
截图:
一个屏幕能全部显示时显示正常

img


超过数目后成左对齐了,而且点击书名右边空白区域没反应。只有点击书名文字才有反应,上滑出来的item是正常的,点击空白区域也可以

img


再次下滑后,上面再次进入屏幕的item又正常了

img

我跑了你提供的代码,new TextView 和 加载layout两种方式都是正常的,item正常点击有响应。你可以定位下是不是单机问题,或者是你建立一个新的工程跑下上述代码。

img