2013-03-23 105 views
0

我有我的android項目的2個類中的相同的代碼。我剛剛開始學習java/android,請問你能給我一些提示嗎?我是否設置了新班級?感謝您的幫助!避免代碼重複Android類

Main.java

public class Main extends Activity { 


private static int RESULT_LOAD_IMAGE = 1; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button btnGallery = (Button) findViewById(R.id.btnGallery); 
    btnGallery.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      Intent i = new Intent(
        Intent.ACTION_PICK, 
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

      startActivityForResult(i, RESULT_LOAD_IMAGE); 
     } 
    }); 
} 

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

if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
    Uri selectedImage = data.getData(); 
    String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

    Cursor cursor = getContentResolver().query(selectedImage, 
      filePathColumn, null, null, null); 
    cursor.moveToFirst(); 

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
    String picturePath = cursor.getString(columnIndex); 

    Intent uploadActivity = new Intent(Main.this, Upload.class); 
    uploadActivity.putExtra("picturePath", picturePath); 
    startActivity(uploadActivity); 
    cursor.close(); 
} 


} 
} 

而且Upload.java

public class Upload extends Activity { 

private static int RESULT_LOAD_IMAGE = 1; 

/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_upload); 
    Bundle extras = getIntent().getExtras(); 
    String picturePathView = extras.getString("picturePath"); 
    ImageView imageView = (ImageView) findViewById(R.id.imgView); 
    findViewById(R.id.imgView).setScrollBarStyle(
      View.SCROLLBARS_INSIDE_INSET); 
    imageView.setImageBitmap(BitmapFactory.decodeFile(picturePathView)); 

    Button btnGallery = (Button) findViewById(R.id.btnGallery); 
    btnGallery.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      Intent i = new Intent(
        Intent.ACTION_PICK, 
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

      startActivityForResult(i, RESULT_LOAD_IMAGE); 
     } 
    }); 
} 

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

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK 
      && null != data) { 
     Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

     Cursor cursor = getContentResolver().query(selectedImage, 
       filePathColumn, null, null, null); 
     cursor.moveToFirst(); 

     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     ImageView imageView = (ImageView) findViewById(R.id.imgView); 
     findViewById(R.id.imgView).setScrollBarStyle(
       View.SCROLLBARS_INSIDE_INSET); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
     cursor.close(); 
    } 

} 
    } 

回答

1

這實際上是哈桑福爾安說的,但有點更正確。

你的抽象活動使持有哪都一樣的屬性,上傳和主要可能是由以下

public abstract class AbstractMediaPickerActivity extends Activity { 

    protected static int RESULT_LOAD_IMAGE = 1; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    protected void startMediaPicker() { 
     Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(i, RESULT_LOAD_IMAGE); 
    } 

    protected abstract void onImagePicked(String picturePath); 

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

     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 

      cursor.close(); 

      onImagePicked(picturePath); 

     } 

    } 
} 

你的兩個其他類由AbstractMediaPickerActivity

public class MainActivity extends AbstractMediaPickerActivity { 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button btnGallery = (Button) findViewById(R.id.btnGallery); 
     btnGallery.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       startMediaPicker(); 
      } 
     }); 
    } 

    protected void onImagePicked(String picturePath) { 
     Intent uploadActivity = new Intent(Main.this, Upload.class); 
     uploadActivity.putExtra("picturePath", picturePath); 
     startActivity(uploadActivity); 
    } 

} 


public class Upload extends AbstractMediaPickerActivity { 


    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_upload); 
     Bundle extras = getIntent().getExtras(); 
     String picturePathView = extras.getString("picturePath"); 
     ImageView imageView = (ImageView) findViewById(R.id.imgView); 
     findViewById(R.id.imgView).setScrollBarStyle(
       View.SCROLLBARS_INSIDE_INSET); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePathView)); 

     Button btnGallery = (Button) findViewById(R.id.btnGallery); 
     btnGallery.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       startMediaPicker(); 
      } 
     }); 
    } 

    @Override 
    protected void onImagePicked(String picturePath) { 
      ImageView imageView = (ImageView) findViewById(R.id.imgView); 
      findViewById(R.id.imgView).setScrollBarStyle(
        View.SCROLLBARS_INSIDE_INSET); 
      imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));  
    } 

} 
+0

喂的魚繼承!這樣可行!非常感謝 – user1735856 2013-03-23 19:59:31

0

創建一類(例如超活性)延伸活性和重複的代碼添加到it.Then創建活動A,B中擴展SuperActivity。

0

當然你可以把所有的代碼放在一個類中。我不會寫所有的代碼,但你會明白如何在你的代碼中獲得重構。

對於onClickListner,你可以做到以下幾點:

@Override 
public void onClick(View clickedView) { 

    int clickedViewId = clickedView.getId(); 

    switch(clickedViewId) { 
     case R.id.firstItem: 
      // code when first view is clicked 
     case R.id.secondItem: 
      // code when second view is clicked 
     default: 
      // optional 
    } 
} 

,然後設置爲兩種觀點相同onClickListner

您可以在onActivityResult方法中使用的同一種switch語句。我希望現在您可以將兩個課程合併爲一個。