1

В моей CheckOutMemo.class я могу установить любое название и содержание, как показано на рисунке. CheckCustomAdapter не отображается ArrayList пункт: ImageView

MainActivity.class затем извлекает этот заголовок и содержимое без каких-либо проблем и отображает пользовательскую строку. Как и в этой картине:

Заголовок = Header

Content = Bodytext

MainActivity class

Но проблема: Когда я беру картину - я не могу отображения его на моя пользовательская строка. (Эта маленькая собака в моей MainActivity там по умолчанию). Я не знаю, в чем проблема.

Я могу просмотреть мое захваченное изображение как растровое изображение в содержимом моего CheckOutMemo.class. Я могу успешно сохранить его в своем внешнем хранилище. Но Я не могу показать его на моей главной операции.

MAINACTIVITY.CLASS

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemLongClickListener, AdapterView.OnItemClickListener { 

public ImageView view; 
private String[] mPermission = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; 
private static final int REQUEST_CODE_PERMISSION = 5; 
CustomAdapter customAdapter; 
ListView listView; 
Intent intent; 
final Context context = this; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    customAdapter = new CustomAdapter(); 
    listView = (ListView) findViewById(R.id.myListView); 
    listView.setAdapter(customAdapter); 
    listView.setOnItemLongClickListener(this); 
    listView.setOnItemClickListener(this); 
    view = (ImageView) this.findViewById(R.id.imageIcon); 

    if (ActivityCompat.checkSelfPermission(MainActivity.this, mPermission[0]) 
      != MockPackageManager.PERMISSION_GRANTED || 
      ActivityCompat.checkSelfPermission(MainActivity.this, mPermission[1]) 
        != MockPackageManager.PERMISSION_GRANTED) { 

     ActivityCompat.requestPermissions(MainActivity.this, 
       mPermission, REQUEST_CODE_PERMISSION); 
    } 
} 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Memo memo = customAdapter.getItem(position); 
    intent = new Intent(getApplicationContext(), CheckOutMemo.class); 
    intent.putExtra("header", memo.header); 
    intent.putExtra("bodyText", memo.bodyText); 
    intent.putExtra("position", position); 

    // launches edit request and saving existing item. 
    startActivityForResult(intent, CheckOutMemo.EDIT_REQUEST_CODE); 
} 

@Override 
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
    alertDialogBuilder.setTitle("Confirm Delete"); 
    alertDialogBuilder.setMessage("Delete memo?"); 
    alertDialogBuilder.setCancelable(false); 
    alertDialogBuilder.setPositiveButton("Delete", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      customAdapter.delete(position); 
      customAdapter.notifyDataSetChanged(); 
     } 
    }); 
    alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      dialogInterface.cancel(); 
     } 
    }); 
    AlertDialog alertDialog = alertDialogBuilder.create(); 
    alertDialog.show(); 

    return true; 
} 

public void addNewNote(View view) { 
    Intent intent = new Intent(getApplicationContext(), CheckOutMemo.class); 
    //Adding new listItem to the ArrayList. 
    startActivityForResult(intent, CheckOutMemo.ADD_REQUEST_CODE); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode != Activity.RESULT_OK) { 
     return; 
    } 
    if (requestCode == CheckOutMemo.ADD_REQUEST_CODE) { 
     String header = data.getStringExtra("header"); 
     String bodyText = data.getStringExtra("bodyText"); 
     if (getIntent().hasExtra("byteArray")) { 
      Bitmap bitmap = BitmapFactory.decodeByteArray(
        getIntent().getByteArrayExtra("byteArray"), 0, getIntent().getByteArrayExtra("byteArray").length); 
      view.setImageBitmap(bitmap); 
     } 
     Memo memo = new Memo(header, bodyText, view); 
     customAdapter.add(memo); 
     customAdapter.notifyDataSetChanged(); 
    } 

    if (requestCode == CheckOutMemo.EDIT_REQUEST_CODE) { 

     int position = data.getIntExtra("position", 0); 
     Memo memo = customAdapter.getItem(position); 
     memo.header = data.getStringExtra("header"); 
     memo.bodyText = data.getStringExtra("bodyText"); 
     customAdapter.notifyDataSetChanged(); 
    } 
    } 
} 

CHECKOUTMEMO.CLASS

public class CheckOutMemo extends AppCompatActivity { 
public static final int ADD_REQUEST_CODE = 1; 
public static final int EDIT_REQUEST_CODE = 2; 
public static final int REQUEST_IMAGE_CAPTURE = 1337; 
public String fileName; 
public Bitmap bitmap; 
private int position; 
EditText editableTitle; 
EditText editableContent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_detail); 
    Intent intent = getIntent(); 
    editableTitle = (EditText) findViewById(R.id.editHeader); 
    editableContent = (EditText) findViewById(R.id.editBodyText); 
    editableTitle.setText(intent.getStringExtra("header")); 
    editableContent.setText(intent.getStringExtra("bodyText")); 
    checkIfUserChangedOrWroteAnyText(); 
    //Declaring keyword and default position. 
    position = intent.getIntExtra("position", 0); 
} 

public void capturePhoto(View view) { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    // Ensure that there's a camera activity to handle the intent 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     // Create the File where the photo should go 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(); 
     } catch (IOException ex) { 
      // Error occurred while creating the File 

     } 
     // Continue only if the File was successfully created 
     if (photoFile != null) { 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
        Uri.fromFile(photoFile)); 
      startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
     } 
    } 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 

     try { 
      loadImageFromFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
public void loadImageFromFile() throws IOException { 

    ImageView view = (ImageView)this.findViewById(R.id.primeImage); 
    view.setVisibility(View.VISIBLE); 
    int targetW = view.getWidth(); 
    int targetH = view.getHeight(); 

    // Get the dimensions of the bitmap 
    BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
    bmOptions.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(fileName, bmOptions); 
    int photoW = bmOptions.outWidth; 
    int photoH = bmOptions.outHeight; 

    // Determine how much to scale down the image 
    int scaleFactor = Math.min(photoW/targetW, photoH/targetH); 

    // Decode the image file into a Bitmap sized to fill the View 
    bmOptions.inJustDecodeBounds = false; 
    bmOptions.inSampleSize = scaleFactor; 
    bitmap = BitmapFactory.decodeFile(fileName, bmOptions); 
    view.setImageBitmap(bitmap); 

} 

public void createImageFromBitmap(){ 
    if(bitmap!=null) { 
     Intent i = new Intent(this, MainActivity.class); 
     ByteArrayOutputStream bs = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 20, bs); 
     i.putExtra("byteArray", bs.toByteArray()); 
     startActivity(i); 
    } else { 
     Toast.makeText(CheckOutMemo.this, "Bitmap is null", Toast.LENGTH_SHORT).show(); 
    } 
} 

public void onSaveClick(View view){ 
    String editableContentString = editableContent.getText().toString(); 
    String editableTitleString = editableTitle.getText().toString(); 
    if(TextUtils.isEmpty(editableContentString) && TextUtils.isEmpty(editableTitleString)) { 
     finish(); 
     Toast.makeText(CheckOutMemo.this, "No content to save, note discarded", Toast.LENGTH_SHORT).show(); 
    } 
    else { 
     if ((TextUtils.isEmpty(editableTitleString))) { 
      editableTitleString.equals(editableContentString); 
      Intent intent = new Intent(); 
      createImageFromBitmap(); 
      intent.putExtra("header", editableContent.getText().toString()); 
      intent.putExtra("position", position); 

      //Sending userInput back to MainActivity. 
      setResult(Activity.RESULT_OK, intent); 
      finish(); 

     } else { 
      Intent intent = new Intent(); 
      createImageFromBitmap(); 
      intent.putExtra("header", editableTitle.getText().toString()); 
      intent.putExtra("bodyText", editableContent.getText().toString()); 
      intent.putExtra("position", position); 
      //Sending userInput back to MainActivity. 
      setResult(Activity.RESULT_OK, intent); 
      finish(); 
     } 
    } 
} 

public void cancelButtonClickedAfterEdit() { 
    Button button = (Button) findViewById(R.id.bigCancelButton); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(final View v) { 
      openDialogFragment(v); 
     } 
    }); 
} 

public File createImageFile() throws IOException { 
     // Create an image file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     String folder_main = "DNote"; 
     String path = Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES).toString() + File.separator + folder_main; 
     File storageDir = new File(path); 
     if (!storageDir.exists()) { 
      storageDir.mkdir(); 
     } 
     File image = File.createTempFile(
       imageFileName, /* prefix */ 
       ".jpg",   /* suffix */ 
       storageDir  /* directory */ 
     ); 

     // Save a file: path for use with ACTION_VIEW intents 
     fileName = image.getAbsolutePath(); 
     MediaScannerConnection.scanFile(getApplicationContext(), new String[]{image.getPath()}, null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        @Override 
        public void onScanCompleted(String path, Uri uri) { 
//      Log.i(TAG, "Scanned " + path); 
        } 
       }); 
     return image; 
    } 


@Override 
public void onBackPressed() { 
    openDialogFragment(null); 
} 
public void onCancelClick(View view){ 
    finish(); 

} 
} 

CUSTOMADAPTER.CLASS

public class CustomAdapter extends BaseAdapter { 



ArrayList<Memo> memos = new ArrayList<>(); 

public void add(Memo memo) { 
    this.memos.add(memo); 
} 

public void delete(int position) { 
    memos.remove(position); 
} 

@Override 
public Memo getItem(int position) { 
    return memos.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getCount() { 
    return memos.size(); 
} 

class MyViewHolder { 
    public TextView header, bodyText; 
    public ImageView imageView; 

    public MyViewHolder(View view) { 
     header = (TextView) view.findViewById(R.id.header); 
     bodyText = (TextView) view.findViewById(R.id.bodyText); 
     imageView = (ImageView) view.findViewById(R.id.primeImage); 

    } 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent){ 

    MyViewHolder viewHolder; 
    if(null == convertView){ 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     convertView = inflater.inflate(R.layout.custom_row, parent, false); 
     viewHolder = new MyViewHolder(convertView); 
     viewHolder.header.setTag(position); 

     convertView.setTag(viewHolder); 

    } 
    else{ 
     viewHolder = (MyViewHolder) convertView.getTag(); 
    } 

    Memo memo = getItem(position); 
    viewHolder.header.setText(memo.header); 
    viewHolder.bodyText.setText(memo.bodyText); 
    CheckOutMemo checkOutMemo = new CheckOutMemo();; 
    if(checkOutMemo.bitmap!=null) { 
     viewHolder.imageView.setImageBitmap(checkOutMemo.bitmap); 
    } 

    return convertView; 
} 


} 

MEMO.CLASS

public class Memo { 

    public String header, bodyText; 
    public ImageView imageView; 

    public Memo(String header, String bodyText, ImageView imageView){ 
     this.header = header; 
     this.bodyText = bodyText; 
     this.imageView = imageView; 
    } 
} 

Я работал над этим в течение более 2 месяцев каждый день. Любая помощь будет оценена!

+0

Я получил здесь человека, работающего над решением для вас. В основном это связано с тем, что вы не передаете какую-то ссылку на свой образ на свою основную деятельность. Например, когда вы создаете экземпляр нового CheckoutMemo в режиме просмотра вашего адаптера, он не имеет растрового изображения. –

+0

вы не установили данные в свой customAdapter. вы не вызываете метод customAdapter.add (memo) где угодно. – Nepster

ответ

1

Хорошо, это минимально жизнеспособное решение, чтобы получить то, что вы хотите. Я просто исправил его достаточно, чтобы изображение было возвращено в ваш основной вид деятельности. Остальные ваши проблемы помогут вам исправить. Единственный класс, который я не затронул, - это ваш класс Memo. Но при этом я настоятельно рекомендую вам обновить его, чтобы сохранить String с контуром изображения вместо ImageView.

Но если для вас то, что вы хотите сделать здесь файлы отредактированы работами:

Первого пользовательского адаптер:

Я изменил строки, где вы получите изображение с памятки, чтобы проверьте его образ изображения для рисования растрового изображения и перенесите это растровое изображение в представление изображения строки. Здесь не нужно было создавать экземпляр этой операции CheckoutMemo.

public class CustomAdapter extends BaseAdapter { 



    ArrayList<Memo> memos = new ArrayList<>(); 

    public void add(Memo memo) { 
     this.memos.add(memo); 
    } 

    public void delete(int position) { 
     memos.remove(position); 
    } 

    @Override 
    public Memo getItem(int position) { 
     return memos.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public int getCount() { 
     return memos.size(); 
    } 

    class MyViewHolder { 
     public TextView header, bodyText; 
     public ImageView imageView; 

     public MyViewHolder(View view) { 
      header = (TextView) view.findViewById(R.id.header); 
      bodyText = (TextView) view.findViewById(R.id.bodyText); 
      imageView = (ImageView) view.findViewById(R.id.primeImage); 

     } 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent){ 

     MyViewHolder viewHolder; 
     if(null == convertView){ 
      LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
      convertView = inflater.inflate(R.layout.custom_row, parent, false); 
      viewHolder = new MyViewHolder(convertView); 
      viewHolder.header.setTag(position); 

      convertView.setTag(viewHolder); 

     } 
     else{ 
      viewHolder = (MyViewHolder) convertView.getTag(); 
     } 

     Memo memo = getItem(position); 
     viewHolder.header.setText(memo.header); 
     viewHolder.bodyText.setText(memo.bodyText); 
     if (memo.imageView.getDrawable() instanceof BitmapDrawable) { 
      BitmapDrawable bitmapDrawable = (BitmapDrawable) memo.imageView.getDrawable(); 
      viewHolder.imageView.setImageBitmap(bitmapDrawable.getBitmap()); 
     } 

     return convertView; 
    } 


} 

Следующая ваша CheckoutMemo:

Я изменил, как работают ваши методы setResult. Я также удалил метод createImageFromBitmap. Это было проблематично, а также вызвало путаницу. Это было дурно. Метод createImageFromBitmap создавал другую MainActivity ... немного смутил меня, почему onActivityResult не вызывался. Это не вызывалось, потому что вы создавали еще одно действие =/

В любом случае, в ваших намерениях, которые вы создаете с результатами, вы заметите, что я также добавляю строку пути к изображению, созданному. Так что основная деятельность может использовать его для получения изображения!

public class CheckOutMemo extends AppCompatActivity { 
    public static final int ADD_REQUEST_CODE = 1; 
    public static final int EDIT_REQUEST_CODE = 2; 
    public static final int REQUEST_IMAGE_CAPTURE = 1337; 
    public String fileName; 
    public Bitmap bitmap; 
    private int position; 
    EditText editableTitle; 
    EditText editableContent; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_detail); 
     Intent intent = getIntent(); 
     editableTitle = (EditText) findViewById(R.id.editHeader); 
     editableContent = (EditText) findViewById(R.id.editBodyText); 
     editableTitle.setText(intent.getStringExtra("header")); 
     editableContent.setText(intent.getStringExtra("bodyText")); 
     //checkIfUserChangedOrWroteAnyText(); 
     //Declaring keyword and default position. 
     position = intent.getIntExtra("position", 0); 
    } 

    public void capturePhoto(View view) { 
     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     // Ensure that there's a camera activity to handle the intent 
     if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
      // Create the File where the photo should go 
      File photoFile = null; 
      try { 
       photoFile = createImageFile(); 
      } catch (IOException ex) { 
       // Error occurred while creating the File 

      } 
      // Continue only if the File was successfully created 
      if (photoFile != null) { 
       takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
         Uri.fromFile(photoFile)); 
       startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
      } 
     } 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 

      try { 
       loadImageFromFile(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    public void loadImageFromFile() throws IOException { 

     ImageView view = (ImageView)this.findViewById(R.id.primeImage); 
     view.setVisibility(View.VISIBLE); 
     int targetW = view.getWidth(); 
     int targetH = view.getHeight(); 

     // Get the dimensions of the bitmap 
     BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
     bmOptions.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(fileName, bmOptions); 
     int photoW = bmOptions.outWidth; 
     int photoH = bmOptions.outHeight; 

     // Determine how much to scale down the image 
     int scaleFactor = Math.min(photoW/targetW, photoH/targetH); 

     // Decode the image file into a Bitmap sized to fill the View 
     bmOptions.inJustDecodeBounds = false; 
     bmOptions.inSampleSize = scaleFactor; 
     bitmap = BitmapFactory.decodeFile(fileName, bmOptions); 
     view.setImageBitmap(bitmap); 

    } 

    public void onSaveClick(View view){ 
     String editableContentString = editableContent.getText().toString(); 
     String editableTitleString = editableTitle.getText().toString(); 
     if(TextUtils.isEmpty(editableContentString) && TextUtils.isEmpty(editableTitleString)) { 
      finish(); 
      Toast.makeText(CheckOutMemo.this, "No content to save, note discarded", Toast.LENGTH_SHORT).show(); 
     } 
     else { 
      if ((TextUtils.isEmpty(editableTitleString))) { 
       editableTitleString.equals(editableContentString); 
       Intent intent = new Intent(); 
       //createImageFromBitmap(); 
       intent.putExtra("header", editableContent.getText().toString()); 
       intent.putExtra("position", position); 
       intent.putExtra("photo", fileName); 

       //Sending userInput back to MainActivity. 
       setResult(AppCompatActivity.RESULT_OK, intent); 
       finish(); 

      } else { 
       Intent intent = new Intent(); 
       //createImageFromBitmap(); 
       intent.putExtra("header", editableTitle.getText().toString()); 
       intent.putExtra("bodyText", editableContent.getText().toString()); 
       intent.putExtra("photo", fileName); 
       intent.putExtra("position", position); 
       //Sending userInput back to MainActivity. 
       setResult(AppCompatActivity.RESULT_OK, intent); 
       finish(); 
      } 
     } 
    } 

    public void cancelButtonClickedAfterEdit() { 
     Button button = (Button) findViewById(R.id.bigCancelButton); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(final View v) { 
       //openDialogFragment(v); 
      } 
     }); 
    } 

    public File createImageFile() throws IOException { 
     // Create an image file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     String folder_main = "DNote"; 
     String path = Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES).toString() + File.separator + folder_main; 
     File storageDir = new File(path); 
     if (!storageDir.exists()) { 
      storageDir.mkdir(); 
     } 
     File image = File.createTempFile(
       imageFileName, /* prefix */ 
       ".jpg",   /* suffix */ 
       storageDir  /* directory */ 
     ); 

     // Save a file: path for use with ACTION_VIEW intents 
     fileName = image.getAbsolutePath(); 
     MediaScannerConnection.scanFile(getApplicationContext(), new String[]{image.getPath()}, null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        @Override 
        public void onScanCompleted(String path, Uri uri) { 
//      Log.i(TAG, "Scanned " + path); 
        } 
       }); 
     return image; 
    } 


    @Override 
    public void onBackPressed() { 
     //openDialogFragment(null); 
    } 
    public void onCancelClick(View view){ 
     finish(); 

    } 
} 

Наконец ваш MainActivity:

В результате на деятельности, если существует путь фото. Затем я добавляю его к представлению изображения объекта memo, чтобы позже получить адаптеры ImageView. Это может быть повышен немного, следовательно, мои комментарии выше, чтобы быть немного меньше запутанным, просто проходя путь к файлу;)

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemLongClickListener, 
     AdapterView.OnItemClickListener { 

    public ImageView view; 
    private String[] mPermission = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}; 
    private static final int REQUEST_CODE_PERMISSION = 5; 
    CustomAdapter customAdapter; 
    ListView listView; 
    Intent intent; 
    final Context context = this; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     customAdapter = new CustomAdapter(); 
     listView = (ListView) findViewById(R.id.myListView); 
     listView.setAdapter(customAdapter); 
     listView.setOnItemLongClickListener(this); 
     listView.setOnItemClickListener(this); 
     //view = (ImageView) this.findViewById(R.id.imageIcon); 

     if (ActivityCompat.checkSelfPermission(MainActivity.this, mPermission[0]) 
       != MockPackageManager.PERMISSION_GRANTED || 
       ActivityCompat.checkSelfPermission(MainActivity.this, mPermission[1]) 
         != MockPackageManager.PERMISSION_GRANTED) { 

      ActivityCompat.requestPermissions(MainActivity.this, 
        mPermission, REQUEST_CODE_PERMISSION); 
     } 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Memo memo = customAdapter.getItem(position); 
     intent = new Intent(getApplicationContext(), CheckOutMemo.class); 
     intent.putExtra("header", memo.header); 
     intent.putExtra("bodyText", memo.bodyText); 
     intent.putExtra("position", position); 

     // launches edit request and saving existing item. 
     startActivityForResult(intent, CheckOutMemo.EDIT_REQUEST_CODE); 
    } 

    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
     alertDialogBuilder.setTitle("Confirm Delete"); 
     alertDialogBuilder.setMessage("Delete memo?"); 
     alertDialogBuilder.setCancelable(false); 
     alertDialogBuilder.setPositiveButton("Delete", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       customAdapter.delete(position); 
       customAdapter.notifyDataSetChanged(); 
      } 
     }); 
     alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       dialogInterface.cancel(); 
      } 
     }); 
     AlertDialog alertDialog = alertDialogBuilder.create(); 
     alertDialog.show(); 

     return true; 
    } 

    public void addNewNote(View view) { 
     Intent intent = new Intent(getApplicationContext(), CheckOutMemo.class); 
     //Adding new listItem to the ArrayList. 
     startActivityForResult(intent, CheckOutMemo.ADD_REQUEST_CODE); 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (resultCode != Activity.RESULT_OK) { 
      return; 
     } 
     if (requestCode == CheckOutMemo.ADD_REQUEST_CODE) { 
      String header = data.getStringExtra("header"); 
      String bodyText = data.getStringExtra("bodyText"); 
      File photo = new File(data.getStringExtra("photo")); 
      ImageView view = new ImageView(this); 

      if (photo.exists()) { 
       Bitmap myBitmap = BitmapFactory.decodeFile(photo.getAbsolutePath()); 
       view.setImageBitmap(myBitmap); 
      } 

      Memo memo = new Memo(header, bodyText, view); 
      customAdapter.add(memo); 
      customAdapter.notifyDataSetChanged(); 
     } 

     if (requestCode == CheckOutMemo.EDIT_REQUEST_CODE) { 

      int position = data.getIntExtra("position", 0); 
      Memo memo = customAdapter.getItem(position); 
      memo.header = data.getStringExtra("header"); 
      memo.bodyText = data.getStringExtra("bodyText"); 
      File photo = new File(data.getStringExtra("photo")); 

      if (photo.exists()) { 
       Bitmap myBitmap = BitmapFactory.decodeFile(photo.getAbsolutePath()); 
       memo.imageView.setImageBitmap(myBitmap); 
      } 
      customAdapter.notifyDataSetChanged(); 
     } 
    } 
} 

В общем, работает это теперь я могу видеть изображения в примечаниях, созданных!

Сохраните ваш проект здесь. Два месяца - это хорошее обязательство. Вы отлично себя чувствуете, продолжайте хорошую работу. Есть больше вещей, которые вы можете улучшить там! Просто продолжайте массировать его и никогда не сдавайтесь.

Вы рок =)

Я могу вам рабочий проект, который я создал, чтобы проверить это, если это необходимо.

+0

Я не могу поблагодарить вас за то, что помог мне! Когда я увидел ваш ответ, у меня были слезливые литераторы. Да, я бы очень хотел получить ваш рабочий проект, если его не так много спросить, так как в XML_Layouts есть какие-то различия. Программа выбрасывает nullPointerException - говорит мне, что мой ImageView пытается вызвать ссылку на нулевой объект в моем CustomAdapter.class. Это обычно вызвано, если я не ссылался на свой ImageView на правильный идентификатор, но так как вы написали для меня этот код, я чувствую себя немного неуверенным в том, что может быть проблемой. Серьезно Дейв, ты герой дня! – user3506

+0

Привет, снова Дэйв! Я нашел проблему в моем XML_layout, и мне удалось исправить это, так что все работает сейчас! :) Большое вам спасибо за помощь! – user3506

+0

Отлично, это потрясающе. Хорошая работа, выясняя различия. Рад, что вы получили его сами, вы всегда будете больше узнавать, когда будете делать. Все лучшее для вас! –

Смежные вопросы