5.11.2015 / 09:33 | |
Dont Пользователь Сейчас: Offline
Регистрация: 09.09.2012
| Может кто подскажет как во фрагменте нормально реализовать кнопку "назад" package com.mycompany.mylistfragment;
import android.app.*;
import android.os.*;
import android.view.*;
public class MainActivity extends Activity implements SimpleListFragment.OnArticleSelectedListener
{
@Override
public void onArticleSelected(String articleStr)
{
selectItem(articleStr);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null)
{
selectItem("/sdcard");
}
}
private void selectItem(String str)
{
str = str != null ? str : "/";
SimpleListFragment fragment = SimpleListFragment.newInstance(str);
getFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.container, fragment).commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, 1, 0, "Root");
menu.add(0, 2, 0, "SD card");
menu.add(1, 3, 0, "Exit");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case 1:
selectItem("/");
break;
case 2:
selectItem("/sdcard");
break;
case 3:
finish();
}
return super.onOptionsItemSelected(item);
}
Нужно как-то сделать возврат в папки на уровень выше кнопкой назад, чтоб при этом обновлялось содержимое списка, на случай изменений. Тестовое приложение чтоб понятнее было о чем речь прикреплено Изменено Dont (5.11 / 09:35) (всего 1 раз)
Прикрепленные файлы: MyListFragment_(…).apk (26.5 кб.) Скачано 296 раз |
5.11.2015 / 10:33 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Dont, я так понимаю, на каждый переход в папку создаётся новый фрагмент? Если так, то это не экономно. Можно во фрагменте всё сделать - переопределить omBackPressed и пока мы не находимся в корне переходить на уровень выше. Как только дошли до корневой папки и нажали Назад - закрываем фрагмент.
__________________
let live |
5.11.2015 / 13:52 | |
Dont Пользователь Сейчас: Offline
Регистрация: 09.09.2012
| aNNiMON, Это описано в документации и называется "Создание обратного вызова события для операции" http://developer.android.com/i...nicatingWithActivityВот как сейчас реализовано в самом ListFragment public static SimpleListFragment newInstance(String str)
{
SimpleListFragment fragment = new SimpleListFragment();
Bundle bundle = new Bundle();
bundle.putString("lastpath", str);
fragment.setArguments(bundle);
return fragment;
}
А как реализовать onBackPressed()? |
5.11.2015 / 16:05 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Dont, вот типа такого можно. __________________
let live |
5.11.2015 / 16:16 | |
Dont Пользователь Сейчас: Offline
Регистрация: 09.09.2012
| aNNiMON, В ListFragment не понятно как реализовать
|
5.11.2015 / 16:26 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Dont, сделай обычный Fragment и помести в него ListView. Так гибче будет.
__________________
let live |
5.11.2015 / 16:31 | |
Dont Пользователь Сейчас: Offline
Регистрация: 09.09.2012
| Так вроде ListFragment как раз для списков сделали. Сейчас вот как Открыть спойлер Закрыть спойлер package com.mycompany.mylistfragment;
import android.app.*;
import android.view.*;
import android.os.*;
import android.widget.*;
import java.io.*;
import java.util.*;
import java.text.*;
import android.content.*;
import android.net.*;
public class SimpleListFragment extends ListFragment
{
public static SimpleListFragment newInstance(String str)
{
SimpleListFragment fragment = new SimpleListFragment();
Bundle bundle = new Bundle();
bundle.putString("lastpath", str);
fragment.setArguments(bundle);
return fragment;
}
String CURRENT_PATH;
private View rootView;
private TextView tvPath;
File[] files;
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
private static final String[] from = {"icon", "name", "modify"};
private static final int[] to = {R.id.file_icon, R.id.file_name, R.id.file_modify};
SimpleAdapter mAdapter;
String uri;
OnArticleSelectedListener mListener;
public interface OnArticleSelectedListener
{
public void onArticleSelected(String articleStr);
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
try
{
mListener = (OnArticleSelectedListener) activity;
}
catch (ClassCastException e)
{
throw new ClassCastException(activity.toString() + "error");
}
}
@Override
public void onCreate(Bundle savedInstanceState)
{
CURRENT_PATH = getArguments().getString("lastpath", "/");
File f = new File(CURRENT_PATH);
files = f.listFiles();
Map<String, Object> map;
long size;
double fileSize;
java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
String modTime;
String strSize;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Arrays.sort(files);
super.onCreate(savedInstanceState);
for (int i = 0; i < files.length; i++)
{
modTime = dateFormat.format(new Date(new File(files[i].getAbsolutePath()).lastModified()));
map = new HashMap<String, Object>();
if (files[i].isFile())
{
size = files[i].length();
if (size >= 1073741824)
{
fileSize = (double) size / 1073741824.0;
strSize = df.format(fileSize) + "G";
}
else if (size >= 1048576)
{
fileSize = (double) size / 1048576.0;
strSize = df.format(fileSize) + "M";
}
else if (size >= 1024)
{
fileSize = (double) size / 1024;
strSize = df.format(fileSize) + "K";
}
else
{
strSize = Long.toString(size) + "B";
}
modTime = strSize != null ? modTime + " " + strSize : modTime;
}
map.put("name", files[i].getName());
map.put("icon", files[i].isFile() ? R.drawable.file : R.drawable.folder);
map.put("modify", modTime);
listItems.add(map);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
rootView = inflater.inflate(R.layout.layout_fragment, container, false);
tvPath = (TextView) rootView.findViewById(R.id.tvpath);
tvPath.setText(CURRENT_PATH);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
mAdapter = new SimpleAdapter(getActivity(), listItems, R.layout.item_list, from, to);
super.onActivityCreated(savedInstanceState);
setListAdapter(mAdapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id)
{
uri = files[position].getPath();
if (files[position].isFile())
{
startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(Uri.fromFile(new File(uri)), "*/*"));
}
else if (files[position].isDirectory() && files[position].listFiles() != null)
{
mListener.onArticleSelected(uri);
}
else
{
Toast.makeText(getActivity(), "No permission", Toast.LENGTH_LONG).show();
}
super.onListItemClick(l, v, position, id);
}
}
Изменено Magatino (5.11 / 16:44) (всего 1 раз) |
20.11.2015 / 20:20 | |
mcdevil Пользователь Сейчас: Offline
Имя: null Регистрация: 17.10.2015
| Дайте пожалуйста ссылку на android ide для Android, желательно прямую, пробовал скачать 4pda даже зарегистрировался, но ничего не выходит, 404 not found
|
20.11.2015 / 20:23 | |
defaultday Пользователь Сейчас: Offline
Откуда: Алапаевск Регистрация: 12.03.2014
| mcdevil, на spaces.ru в поиск напиши AIDE там есть крякнутая
|
20.11.2015 / 20:29 | |
mcdevil Пользователь Сейчас: Offline
Имя: null Регистрация: 17.10.2015
| defaultday, Я не могу войти на spaces, не получается через комп.
|