クリック処理を匿名クラスから OnClickListener インターフェースの実装に変更 - 壁紙変更アプリ (7)
画面遷移は新しいアクティビティを作成して制御すれば良いらしい。
新しいアクティビティを作成しない方法もあるみたいだけど、
今回は素直に新しいアクティビティを作成してみます。
ですが、その前にリファクタリングとして、クリック処理を、
匿名クラスから OnClickListener インターフェースの実装に変更します。
まずは主な修正のみ抜粋。
OnClickListener インターフェースを実装。
-public class MainActivity extends ActionBarActivity { +public class MainActivity extends ActionBarActivity implements OnClickListener{
匿名クラスを切り出し。
button = (Button) findViewById(R.id.Button_Choose); - button.setOnClickListener(new OnClickListener() { + button.setOnClickListener(this); ... + public void onClick(View v) {
今まで各ボタンに匿名クラスの形だったので、
onClick で識別。
+ public void onClick(View v) { + switch(v.getId()) { + case R.id.Button_Choose:
あとの中身はほぼ同じで、リファクタリング終了。
全体としてはこんな感じになりました。
まえのコードとかログとか残ってて汚いですが…。
なお、OnItemClickListener は1つのボタンのみなので、
そのまま匿名クラスです。
public class MainActivity extends ActionBarActivity implements OnClickListener{ private static final String TAG = "WallpaperChange"; WallpaperManager mWM; Bitmap bmpImageFile; private ArrayList<String> item_list; private String strPath; private File[] files; private ListView listview; private String item; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button; button = (Button) findViewById(R.id.Button_Choose); button.setOnClickListener(this); button = (Button) findViewById(R.id.Button_Set); button.setOnClickListener(this); button = (Button) findViewById(R.id.Button_Clear); button.setOnClickListener(this); mWM = WallpaperManager.getInstance(this); int height = mWM.getDesiredMinimumHeight(); int width = mWM.getDesiredMinimumWidth(); Log.v(TAG, "Initial height = " + height); Log.v(TAG, "Initial width = " + width); } public void onClick(View v) { switch(v.getId()) { case R.id.Button_Choose: Log.v(TAG, "Choose"); listview = (ListView) findViewById(R.id.listview); item_list = new ArrayList<String>(); // Hard-coded files position. files = new File("/storage/sdcard0/Pictures/Screenshots").listFiles(); // Get files list if (files != null) { for (int i = 0; i < files.length; i++) { item_list.add(files[i].getName()); } } ArrayAdapter<String> arrayadapter = new ArrayAdapter<String> (MainActivity.this, android.R.layout.simple_expandable_list_item_1, item_list); listview.setAdapter(arrayadapter); listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String click_parent = (String) parent.getClass().getSimpleName(); String click_position = String.valueOf(position); String click_id = String.valueOf(id); Log.v(TAG, String.format("onItemClick click_parent : %s", click_parent)); Log.v(TAG, String.format("onItemClick click_position : %s", click_position)); Log.v(TAG, String.format("onItemClick click_id : %s", click_id)); // Implementation for changing the wallpaper Log.v(TAG, "onItemClick:" + files[position].toString()); bmpImageFile = BitmapFactory.decodeFile(files[position].toString()); int height = mWM.getDesiredMinimumHeight(); int width = mWM.getDesiredMinimumWidth(); Log.v(TAG, "before height:" + height); Log.v(TAG, "before width:" + width); try { mWM.setBitmap(bmpImageFile); mWM.suggestDesiredDimensions(1200, 1920); height = mWM.getDesiredMinimumHeight(); width = mWM.getDesiredMinimumWidth(); Log.v(TAG, "after height:" + height); Log.v(TAG, "after width:" + width); } catch (IOException e) { e.printStackTrace(); } finish(); } }); break; case R.id.Button_Set: try { mWM.setResource(R.drawable.sample); } catch (IOException e) { e.printStackTrace(); } break; case R.id.Button_Clear: Log.v(TAG, "Clear"); try { mWM.clear(); int height = mWM.getDesiredMinimumHeight(); int width = mWM.getDesiredMinimumWidth(); Log.v(TAG, "clear height:" + height); Log.v(TAG, "clear width:" + width); } catch (IOException e) { e.printStackTrace(); } break; } } }