У меня есть динамический массив изображений, который поступает из базы данных. И я просто показываю миниатюры изображений на первом экране и хочу отображать полный экран одного массива изображений. Дело в том, что я хочу передать весь динамический массив на следующий экран. На самом деле я знаю, как использовать настройки в java. Но я не знаю, как передать весь массив с переменными или что-то в этом роде. Любые идеи были бы оценены.
public class MerchantDetails extends GLCityActivity implements OnClickListener {
public static MerchantDetails instance;
private Gallery gallery;
private ImageView imView;
String Header, contentName;
DBManager gDatabase = new DBManager(this);
private ArrayList<Multimedia> mm;
private ImageViewAdapter iva;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.Theme_Translucent);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.details);
instance = this;
initActivity(instance, " ");
try {
gDatabase.createDataBase();
} catch (IOException e) {
throw new Error("Unable to create database");
}
try {
gDatabase.openDatabase();
} catch (SQLiteException sqle) {
throw sqle;
}
settingLayout();
}
public void settingLayout() {
SharedPreferences preferences = getSharedPreferences(
Constants.DEFAUL_SHARE_DATA, 0);
Header = preferences.getString("SubName", "");
headerTxt = (TextView) findViewById(R.id.templateTopTitleTView);
headerTxt.setText(Header);
gallery = (Gallery) findViewById(R.id.gallery);
if (mm.isEmpty()) {
gallery.setVisibility(gallery.INVISIBLE);
} else {
gallery.setAdapter(iva);
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v,
int position, long id) {
SharedPreferences preferences = getSharedPreferences(
Constants.DEFAUL_SHARE_DATA, 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("ImagePosition", mm.get(position) + "");
editor.putInt("ImageLength", mm.size());
Intent viewer = new Intent(instance, GalleryViewer.class);
startActivityForResult(viewer, 0);
if (editor.commit()) {
}
}
});
}
}
private class ImageViewAdapter extends ArrayAdapter<Multimedia> {
private ArrayList<Multimedia> items;
public ImageViewAdapter(Context context, int textViewResourceId,
ArrayList<Multimedia> items) {
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.image_list, null);
}
Multimedia info = items.get(position);
if (info != null) {
ImageView imView = (ImageView) v
.findViewById(R.id.rowlistIconIView);
String name = info.thumbnail;
String[] test = gDatabase.split(name, ".");
int resID = getResources().getIdentifier(test[0], "drawable",
getPackageName());
Log.v("Log", name + ";" + resID + ";" + test[0] + ";");
try {
imView.setImageResource(resID);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
return v;
}
}
}
Отредактировано:
@Jeremy Edwards, спасибо за ваш ответ. Я пытался сделать то, что вы предлагаете, но я нашел эту ошибку, пока я закодирован. Я попытался использовать putExtra (String name, int [] value), но ошибка указала Метод putExtra (имя строки, логическое значение) в типе Intent не применим для аргументов (String, Multimedia), На самом деле я уже выбрал putExtra (имя строки, значение int []) из окна автоматического предложения. интересно, как это изменится обратно (имя строки, int [] значение) внезапно. Пожалуйста, проверьте мой код ниже.
private ArrayList<Multimedia> mm;
viewer.putExtra("ImagePosition",mm.get(position));
viewer.putExtra(String name,int[] value)
Для зрителя Intent. Используйте Intent.put(имя, "идентификатор изображения" ).
Затем в активности зрителя используйте getIntent(). getIntExtra (имя), чтобы вернуть этот идентификатор.
Я бы посоветовал не передавать данные изображений, так как андроид использует IPC "Общая память" для передачи данных между границами активности. Он должен был быть легким.
Активность зрителя должна получить идентификатор, а затем нажать на БД для полномасштабного изображения, которое вы хотите. Вам не нужно использовать предпочтения для выполнения этого, так как Bundle внутри объекта Intent будет нести необходимую вам информацию.
От сканирования через ваш код я думаю, что вы сохраняете изображения в ArrayList.
ArrayList является Serializable, поэтому вы можете использовать пакет, чтобы передать его на следующий экран. Вы можете использовать метод putSerializable
Что-то вроде этого
Bundle bundle = new Bundle();
bundle.putSerializable(<key>, <your serializable obj>);
то используйте getSerializable(), чтобы вернуть его