Проблема(краткое описание): В AlertDialog диалоге не обновляются view компоненты. (Не понимаю как получить доступ к view компонентам в AlertDialog )
Описание:
Есть три блока (SimpleTree список), AlertDIalog и основное Activity.
Все эти три блока я вынес в разные классы:
NewOrdersActivity.class -основное activity
OrderAdapter.class - мой кастом список
DialogScreen.class - мой диалог.
Для пользователя это выглядит след. образом: Тыкаем на элемент списка - Открывается AlertDialog- в нем кнопка "Выбрать фотку из галереи" - тыкаем фотку и меняем view в AlertDialog (Короче выводим эту фотку).
PS.Все работает если я реализовываю это в одном Activity(без разбиения на отдельные классы).
Вот мой код:
OrderAdapter.class- описывать я думаю смысла нет, в нем наш кастом список и из него вызывается AlertDialog
DialogScreen.class:
Код: Выделить всё
public class DialogScreen extends Activity{
final static int IDD_CLOSE_ORDER = 1;
final static int IDD_ADD_PHOTO= 2;
static DB db;
static View view;
static int SELECT_PICTURE = 3;
static ImageView imgFromGallery;
public static AlertDialog getDialog(final Context ctx, int ID, LayoutInflater lInflater, final String idRow, final Cursor cursor) {
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
switch(ID) {
case IDD_ADD_PHOTO: // Диалоговое окно About
builder.setIcon(R.drawable.photocam);
builder.setTitle("Фотоотчет");
builder.setCancelable(true);
view = lInflater.inflate(R.layout.dialog_add_photo, null, false);
imgFromGallery = (ImageView)view.findViewById(R.id.imgFromGallery);
builder.setView(view);
Button btnAddFromGallery = (Button)view.findViewById(R.id.btnAddFromGallery);
btnAddFromGallery.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
getPhoto(ctx);
}
});
builder.setNegativeButton("Отменить", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setPositiveButton("Сохранить", new DialogInterface.OnClickListener() { // Кнопка ОК
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
return builder.create();
default:
return null;
}
}
static void getPhoto(Context ctx){
Intent i = new Intent(
Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
((Activity) ctx).startActivityForResult(i, SELECT_PICTURE);
}
}
NewOrdersActivity.class:
Код: Выделить всё
public class NewOrdersActivity extends Activity{
private static final String LOG_TAG = "myLogs";
ExpandableListView elv;
DB db;
String userID;
static int SELECT_PICTURE = 3;
ImageView img;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_orders_activity);
// открываем подключение к БД
db = new DB(this);
db.open();
// готовим данные по группам для адаптера
Cursor cursor = db.getOrdersData(1);
startManagingCursor(cursor);
// сопоставление данных и View для групп
String[] groupFrom = { DB.COLUMN_ID };
int[] groupTo = { android.R.id.text1 };
// сопоставление данных и View для элементов
String[] childFrom = { DB.COLUMN_STATUS };
int[] childTo = { android.R.id.text1 };
// создаем адаптер и настраиваем список
SimpleCursorTreeAdapter sctAdapter = new OrderAdapter(db,this, cursor,
R.layout.customer_adapter_theme_top, groupFrom,
groupTo, R.layout.customer_adapter_theme_content, childFrom,
childTo);
elv = (ExpandableListView)findViewById(R.id.elv_new_orders);
elv.setAdapter(sctAdapter);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//Ответ галереи
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
String selectedImagePath = getPath(selectedImageUri);
BitmapDrawable d = new BitmapDrawable(selectedImagePath);
// img.setImageDrawable(d);
Вот тут я не понимаю как обратится к view в AlertDialog который реализован в классе DialogScreen.class
}
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}