Androidアプリ。複数のメソッドでcursorを利用する方法。
こんにちは。現在アンドロイドの画像スライドショーのアプリケーションを作っております。概要を説明すると、実機上に保存された画像をcursorで取得し、画面上の再生・進む・戻るボタンで画像を切り替えていくもので、現在各ボタンごとにメソッドを用意して各種操作を行おうとしております。現在つまずいているところは、進む・戻るボタンを押しても画像が切り替わらないというところです。なお、エラーはおこっておりません。
以下がコードです。
package jp.oooooo.hojun.bun.autoslideshowapp;
import android.Manifest;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
Button mStartPauseButton;
Button mForwardButton;
Button mBackButton;
Cursor cursor;
private static final int PERMISSIONS_REQUEST_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mStartPauseButton = findViewById(R.id.button1);
mForwardButton = findViewById(R.id.button2);
mBackButton = findViewById(R.id.button3);
mForwardButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getNextInfo();
}
});
mBackButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getPreviousInfo();
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
getContentsInfo();
} else {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_CODE);
}
} else {
getContentsInfo();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_REQUEST_CODE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getContentsInfo();
}
break;
default:
break;
}
}
private void getContentsInfo() {
ContentResolver resolver = getContentResolver();
cursor = resolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
null,
null,
null,
null
);
cursor.moveToFirst();
int fieldIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
Long id = cursor.getLong(fieldIndex);
Uri imageUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
ImageView imageVIew = findViewById(R.id.imageView);
imageVIew.setImageURI(imageUri);
}
private void getNextInfo() {
ContentResolver resolver = getContentResolver();
cursor = resolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
null,
null,
null,
null
);
cursor.moveToFirst();
int fieldIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
Long id = cursor.getLong(fieldIndex);
Uri imageUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
ImageView imageVIew = findViewById(R.id.imageView);
imageVIew.setImageURI(imageUri);
}
private void getPreviousInfo() {
ContentResolver resolver = getContentResolver();
cursor = resolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
null,
null,
null,
null
);
cursor.moveToFirst();
int fieldIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
Long id = cursor.getLong(fieldIndex);
Uri imageUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
ImageView imageVIew = findViewById(R.id.imageView);
imageVIew.setImageURI(imageUri);
}
@Override
protected void onStop() {
super.onStop();
cursor.close();
}
}
どのようにすれば次または前の画像を取得できるでしょうか。