package net.itsuha.android.zip4j; import org.apache.commons.io.IOUtils; import android.content.res.AssetManager; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Spinner; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class MainActivity extends FragmentActivity { @SuppressWarnings("unused") private static final String TAG = MainActivity.class.getSimpleName(); private static final String FRAGMENT_TAG = "zip"; private String[] mZipFiles; private File mFile; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { AssetManager am = getAssets(); mZipFiles = am.list(""); for (String f : mZipFiles) { copyAssetsZipToFiles(f); } } catch (IOException e1) { e1.printStackTrace(); } Button b = (Button) findViewById(R.id.zip_button); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); ZipListFragment f = new ZipListFragment(); // Retain fields of Fragment as-is on configuration changes // "This can only be used with fragments not in the back stack" // http://developer.android.com/reference/android/support/v4/app/Fragment.html#setRetainInstance(boolean) f.setRetainInstance(true); Bundle args = new Bundle(); args.putString(ZipListFragment.ARGUMENT_ZIP_FILE, mZipFiles[((Spinner) findViewById(R.id.zip_file_spinner)) .getSelectedItemPosition()]); f.setArguments(args); ft.add(R.id.fragment, f, FRAGMENT_TAG); ft.commit(); } }); Spinner sp = (Spinner) findViewById(R.id.zip_file_spinner); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, mZipFiles); sp.setAdapter(adapter); } public void copyAssetsZipToFiles(String fileName) throws IOException { AssetManager am = getAssets(); File targetDir = getFilesDir(); mFile = new File(targetDir, fileName); OutputStream os = new FileOutputStream(mFile); InputStream is = am.open(fileName); IOUtils.copy(is, os); os.close(); is.close(); } /* * (non-Javadoc) * @see android.app.Activity#onKeyUp(int, android.view.KeyEvent) */ @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { FragmentManager fm = getSupportFragmentManager(); Fragment f = fm.findFragmentByTag(FRAGMENT_TAG); if (f != null && f instanceof FragmentBackKeyListener) { if (!((FragmentBackKeyListener) f).onBackKeyUp()) { FragmentTransaction ft = fm.beginTransaction(); ft.remove(f); ft.commit(); } return true; } } return super.onKeyUp(keyCode, event); } /** * ZipListFragment must implement this interface. */ public interface FragmentBackKeyListener { /** * @return True if the listener has consumed the event, false otherwise. */ public boolean onBackKeyUp(); } }