0

我正在尝试编写一个打开弹出窗口的函数,并用按钮链接填充它,该链接指向应用程序录制的所有先前图片或录制的音频文件。我尝试编写该函数,以便它适用于音频文件或图像。目标是在屏幕上出现一个弹出窗口,其中有一个用于每个先前文件的按钮,并在单击时打开指定的文件。该应用程序将成功打开弹​​出窗口,但它只会由自动定义的按钮(后退)填充,该按钮将关闭弹出窗口。但是,后退按钮下方会出现空白,这会增加滚动视图的高度并允许在弹出窗口内滚动,但实际上不会出现任何按钮。

最初,我的问题来自于不包括我的每个布局元素的 pw.getContentView() (pw 是我的弹出窗口),但我不确定它到底做了什么,所以这可能是问题的一部分。

这是为打开弹出窗口而调用的函数。

private void display_media(int check, String header_text){
    //The check variable is a 1 or 0 depending on if it's an image or an audio.
    // header_text is a simply text to replace the default header.
    try{
        LayoutInflater inflater = (LayoutInflater) NewPlan_Two.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.files_layout, (ViewGroup) findViewById(R.id.show_media));
        pw = new PopupWindow(layout,width/4,height/3,true);//width and height are predefined values

        Button close_button = (Button) layout.findViewById(R.id.back_scroll);
        close_button.setOnClickListener(close_view);
        TextView header =(TextView) pw.getContentView().findViewById(R.id.previous_files);
        header.setText(header_text);

        LinearLayout l_l = (LinearLayout) pw.getContentView().findViewById(R.id.scroll_linear);
        for(String media_file: files){ // this is defined and explained below
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            Button new_button = new Button(this);
            if(check==0){
                new_button.setId(image_id_count);
                image_id_count++; // this is initialized to 3000
                button_id = new_button.getId();
            }
            else{
                new_button.setId(audio_id_count);
                audio_id_count++; // this is initialized to 2000
                button_id = new_button.getId();
            }
            new_button.setText(media_file);
            l_l.addView(new_button,params);

            if(check==0)
                button_two= (Button) pw.getContentView().findViewById(button_id);
            else
                button_two = (Button) pw.getContentView().findViewById(button_id);
            button_two.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    pw.dismiss(); 
                    // this will be replaced with code to open the image or audio, but I haven't written it yet.
                }   
            });         

        } 
        pw.showAtLocation(layout, Gravity.CENTER, 0, 0);

    }catch(Exception e){
        e.printStackTrace();
    }
}

为了解析音频或图像文件,我使用了这个函数。它成功地获取了文件的名称。它以“mp4”或“png”作为参数调用。

private void parse_Files(String fileType){
    files = new ArrayList<String>();
    File folder = new File(abs_path); // abs_path is the path to the folder with the files
    File[] list_of_files = folder.listFiles();
    for(int count = 0; count < list_of_files.length;count++){   
        String file_name = list_of_files[count].getName();
        String[] parsed_list = file_name.split("\\.");
        if(parsed_list[1].equals(fileType))
            files.add(parsed_list[0]);
    }
}

最后是作为弹出窗口打开的 xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/show_media"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:orientation="vertical" 
 android:padding = "15dp"
 android:background="#DCDDF7">

<TextView
    android:id="@+id/previous_files"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="@string/previous_files"
    android:textSize="20sp"/>
<ScrollView android:layout_height="wrap_content" android:layout_width="match_parent" android:background="#FFFFFF" >

    <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/scroll_linear">

        <Button 
             android:id="@+id/back_scroll"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/back"
             android:textSize="18sp"/>
    </LinearLayout>

</ScrollView>      

</LinearLayout>

谢谢!

编辑:

我试图将其更改为列表视图,但我遇到了同样的问题。它会打开一个弹出窗口,并且有与 x 个关联文件对应的 x 个按钮,但没有一个按钮具有文本或单击时执行任何操作。我错过了什么?

这是修改后的代码:

private void display_media(int check, String header_text){
    try{
        display_media_array=new String[files.size()];
        display_media_array=files.toArray(display_media_array);

        LayoutInflater inflater = (LayoutInflater) NewPlan_Two.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.files_layout, null);
        pw = new PopupWindow(layout,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,true);

        ListView listView = (ListView) layout.findViewById(R.id.list_view);
        listView.setAdapter(new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_list_item_1, display_media_array));
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                pw.dismiss();                   
            }
        });

        Button close_button = (Button) layout.findViewById(R.id.back_scroll);
        close_button.setOnClickListener(close_view);
        TextView header =(TextView) pw.getContentView().findViewById(R.id.previous_files);
        header.setText(header_text);

        pw.showAtLocation(layout, Gravity.CENTER, 0, 0);

    }catch(Exception e){
        e.printStackTrace();
    }
}

这是新的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/show_media"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:background="#DCDDF7"
 android:orientation="vertical"
 android:padding="15dp" >

<TextView
    android:id="@+id/previous_files"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="@string/previous_files"
    android:textSize="20sp" />

    <ListView
        android:id="@+id/list_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#FFFFFF" >
    </ListView>

<Button
    android:id="@+id/back_scroll"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/back"
    android:textSize="18sp" />

</LinearLayout>

任何帮助表示赞赏,谢谢!

4

0 回答 0