为什么OnclickListener不能与AlertDialog中的ViewList一起使用?

时间:2013-04-12 12:56:42

标签: android listview alertdialog onclicklistener filepicker

我想根据ListView创建一个带有AlertDialog的文件选择器 我的问题是我的onClickListener似乎什么都不做。所以当我点击列表中的一行时没有任何反应。
这是我的FilePicker类:​​

public class FilePicker extends AlertDialog.Builder {

    public FilePicker(final Context context) {
        super(context);
        LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final ListView v = (ListView) li.inflate(R.layout.file_list, null, false);
        File[] dirList = (new File (Environment.getExternalStorageDirectory().getAbsolutePath() + "/myDir")).listFiles();

        ArrayList<HashMap<String, String>> mylistData =
                new ArrayList<HashMap<String, String>>();
        String[] columnTags = new String[] {"col1", "col2"};

        for (File file: dirList){
            HashMap<String,String> map = new HashMap<String, String>();
            map.put(columnTags[0], file.getName());
            map.put(columnTags[1], DateFormat.format("yyyy-MM-dd",new Date(file.lastModified())).toString());
            mylistData.add(map);
        }


        int[] columnIds = new int[] {R.id.filelistitemview,R.id.datelistitemview};
        SimpleAdapter adapter = new SimpleAdapter(context, mylistData,R.layout.file_list_item,columnTags , columnIds);
        this.setAdapter(adapter, null);
        this.setTitle("Choose midi settings file");
        v.setOnItemClickListener(new OnItemClickListener() {
              public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) {
                String selectedFromList =(String) (v.getItemAtPosition(myItemInt));
                Toast.makeText(context, selectedFromList, Toast.LENGTH_SHORT).show();
              }                 
        });
        this.setView(v);
    }

}

这是我的两个xml文件:
file_list.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />

和file_list_item.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="4dip"
     android:paddingBottom="6dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">
<TextView 
    android:id="@+id/filelistitemview"
    android:layout_width="120dip"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:textColor="#000"
    android:textSize="23dp" 
    android:layout_weight="1"/>

<TextView 
    android:id="@+id/datelistitemview"
    android:layout_width="60dip"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:textColor="#000"
    android:textSize="18dp" 
    android:layout_weight="1"/>

 </LinearLayout>

在我的活动中,我只需要调用我的FilePicker:

    FilePicker fp = new FilePicker(this);
fp.show();

2 个答案:

答案 0 :(得分:2)

而不是将适配器设置为对话框对象

this.setAdapter(adapter, null);

您可能需要将其设置为列表视图

v.setAdapter(adapter);

答案 1 :(得分:0)

通过

更改final ListView v = (ListView) li.inflate(R.layout.file_list, null, false);
`View vi = inflater.inflate(R.layout.file_list, null`);

因为在这里你在列表视图中夸大了布局,现在

 final ListView v = (ListView)vi.findViewById(your listviewid);