ポップアップウィンドウを開き、アプリが記録した以前のすべての写真または記録されたオーディオファイルへのボタンリンクを設定する関数を作成しようとしています。オーディオファイルまたは画像で機能するように関数を作成しようとしました。目標は、ポップアップ ウィンドウを画面に表示して、前の各ファイルのボタンを表示し、クリックすると指定されたファイルを開くことです。アプリはポップアップ ウィンドウを正常に開きますが、ポップアップ ウィンドウを閉じる自動定義ボタン (戻る) によってのみ設定されます。ただし、戻るボタンの下に空白が表示されるため、スクロール ビューの高さが増し、ポップアップ ウィンドウ内でスクロールできるようになりますが、実際にはボタンは表示されません。
最初、私の問題は、各レイアウト要素に pw.getContentView() (pw は私の popupwindow) を含めなかったことから生じましたが、それが正確に何をするのかよくわからないので、それが問題の一部である可能性があります。
これは、ポップアップ ウィンドウを開くために呼び出される関数です。
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>
どんな助けでも大歓迎です、ありがとう!