Intentでの画面遷移で、別Activityが中々レイアウト表示されない

329 views
Skip to first unread message

H.Shibata

unread,
Mar 28, 2011, 9:56:40 PM3/28/11
to 日本Androidの会
初めまして、H.Shibataと申します。

早速ですが、自分の現在の知識では解決が難しいので皆様のお力をお貸しください。


まず、代表的なアクティビティが二つありまして、MainActivityから動画のURLをインテントしVideoViewを実装したアクティビ
ティ

(以下VideoActivity)でURLを読み込みます。
そしてSDカードに保存してVideoViewでSDカードから再生というソースコードを書きました。

しかし、ここで問題がありまして、MainActivityからVideoActivityへの画面遷移で中々レイアウトが表示されないという事象が


生しました。
どうやら何も表示されてない時にSDカードへの書き込みが行われており、完了しだいVideoActivityのレイアウトが表示されている

ようです・・・。

URL読み込み前にダイアログを入れても表示はされず、VideoActivityのレイアウトが表示されてからダイアログは表示され一瞬で終

了しています。

なぜこのような事象が発生してしまうのか、ご教授お願いします。

下記がVideoActivityのソースコードになりますので、よろしくお願いします。

public class VideoActivity extends Activity implements OnClickListener
{

private ProgressDialog dialog;
private VideoView video;
private TextView text;
private Intent intent;
private File folder;
private File movie;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main2);

dialog = new ProgressDialog(this);

intent = getIntent();
String mp4Title = intent.getExtras().getString("mp4Title");
String Dogaurl = intent.getExtras().getString("url");
String title = intent.getExtras().getString("title");

text=(TextView)findViewById(R.id.tv2);
text.setText(title);

String status = Environment.getExternalStorageState();
if(status.equals(Environment.MEDIA_MOUNTED)){
String sdcard =
Environment.getExternalStorageDirectory().getPath();
folder = new File(sdcard, "VIDEO");
if (folder.exists() == false){
folder.mkdir();
}
movie = new File(folder, mp4Title);
if (!movie.exists()){
dialog.setTitle("接続中");
dialog.setMessage("動画を取得しています。");
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setCancelable(true);
dialog.show();

URL url;
int size;
byte[] w= new byte[1024];
HttpURLConnection con = null;
InputStream in = null;
FileOutputStream out = null;

try{
url = new URL(Dogaurl);
out = new FileOutputStream(movie);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.connect();
in = con.getInputStream();

while(true){
size = in.read(w);
if(size<=0) break;
out.write(w, 0, size);
}
in.close();
out.close();
con.disconnect();

}catch(Exception e){
}
}
}else{
new AlertDialog.Builder(this).setMessage("SDカードが必要で
す").setPositiveButton("OK", null).show();
}
video = (VideoView)findViewById(R.id.video);
video.requestFocus();
video.setMediaController(new MediaController(this));
try{

video.setVideoURI(Uri.fromFile(movie));
video.setOnPreparedListener(new
MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
dialog.dismiss();
video.start();
}
});
}catch(Exception e){
dialog.dismiss();
}
//タイトルバーのカスタマイズ
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
R.layout.custom_title);
Button returnBtn = (Button)findViewById(R.id.returnBtn);
returnBtn.setOnClickListener(this);
Button deletBtn = (Button)findViewById(R.id.deletBtn);
deletBtn.setOnClickListener(this);
}

@Override
public void onClick(View v) {
if(v.getId() == R.id.returnBtn){
finish();
}else if(v.getId() == R.id.deletBtn){
movie.delete();
Toast.makeText(this, "SDカードから動画を削除します", Toast.LENGTH_SHORT).show();
finish();
}
}

Nkzn

unread,
Mar 29, 2011, 12:24:44 AM3/29/11
to 日本Androidの会
なかざんです。

onCreateでsetContentViewした時点では、ビューは登録されただけで表示されていません。
onWindowFocusChangedはビューが表示された後に呼ばれるので、
setContentViewの下のdialog = new ProgressDialog(this); 以降の処理を
onWindowFocusChanged内に書いてみてください。
たぶんこれでいけます。

--Yukiya Nakagawa

H.Shibata

unread,
Mar 29, 2011, 1:25:39 AM3/29/11
to 日本Androidの会
なかざんさん、

返信ありがとうございます!
なるほど、Windowに変化があると呼び出されるメソッドなんですかね。

実装してみたのですが、
同じActivityの削除ボタン押しても削除がされなくなりました(涙

ファイル・エクスプローラを見ながら削除してみると一度削除されながら、またすぐにonWindowFocusChanged内で作成されるという事象
が起こっているようで・・・
> > }- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages