Re: Урок 125. ViewPager
Добавлено: 21 апр 2014, 15:28
подскажите как добавлять сюда view элементы?
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
Вот моя часть кода , в которой перелистывывается вся активность -Вот пример:Вопрос
а как зафиксировать один View, чтобы он не перемещался при слайдинге? например элемент Button или ImageViewОтвет
Можно описать в файле разметки элементы так, чтобы ViewPager был лишь одним из компонентов. Например, создать такой файл main_layout.xml:
Затем в activity приложения делаем setContentView(R.layout.main_layout), а экземпляр ViewPager добываем с помощью findViewById(R.id.view_pager).Код: Выделить всё
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon"/> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="wrap_content" android:layout_height="wrap_content"> </android.support.v4.view.ViewPager> </LinearLayout>
Указанная картинка будет находиться наверху экрана, а страницы, которые скроллятся с помощью ViewPager будут располагаться ниже.
Код: Выделить всё
\......
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//===========================================
LayoutInflater inflater = LayoutInflater.from(this);
List<View> pages = new ArrayList<View>();
View page = inflater.inflate(R.layout.main_layout, null);
ViewPager vp = (ViewPager)page.findViewById(R.id.view_pager);
pages.add(page);
page = inflater.inflate(R.layout.main2, null);
pages.add(page);
SamplePagerAdapter pagerAdapter = new SamplePagerAdapter(pages);
ViewPager viewPager = new ViewPager(this);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(1);
setContentView(viewPager);
//==========================================
}
}
\........
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="300dp"
android:layout_height="400dp" >
</android.support.v4.view.ViewPager>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="51dp"
android:layout_toRightOf="@+id/image"
android:text="Button" />
</RelativeLayout>
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/image1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="300dp"
android:layout_height="400dp" >
</android.support.v4.view.ViewPager>
<Button
android:id="@+id/button11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="51dp"
android:layout_toRightOf="@+id/image"
android:text="Button" />
</RelativeLayout>
Код: Выделить всё
public class FragmentTab1 extends Fragment {
private ListView listView;
private WeakReference<GetSchedAsyncTask> getSchedTaskWeakRef;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragmenttab1, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
listView = (ListView) getView().findViewById(R.id.fragment_list);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
String name = ((TextView)view.findViewById(R.id.fragmentName)).getText().toString();
Intent i = new Intent (getActivity(),NameActivity.class);
i.putExtra(NameActivity.FRAGMENT_NAME, name);
startActivity(i);
}
});
setRetainInstance(true);
startNewAsyncTask();
}
private void startNewAsyncTask() {
Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_WEEK);
String weekType;
if (day==1 || day ==7) {
weekType="we";
}
else
weekType="wd";
String timeNow = (new SimpleDateFormat("HH:mm").format(calendar.getTime()));
GetSchedAsyncTask asyncTask = new GetSchedAsyncTask(this);
this.getSchedTaskWeakRef = new WeakReference<GetSchedAsyncTask>(asyncTask);
asyncTask.execute(weekType,timeNow);
}
private class GetSchedAsyncTask extends AsyncTask<Object, Void, List<Schedule>> {
private WeakReference<FragmentTab1> fragmentWeakRef;
private GetSchedAsyncTask (FragmentTab1 fragment) {
this.fragmentWeakRef = new WeakReference<FragmentTab1>(fragment);
}
@Override
protected List<Schedule> doInBackground(Object... params) {
NameDatabase db = NameDatabase.getInstance(getActivity());
List<Schedule> schedule = db.getSchedule((String) params[0], (String) params[1]);
return schedule;
}
@Override
protected void onPostExecute(List<Schedule> schedule) {
super.onPostExecute(schedule);
if (this.fragmentWeakRef.get() != null) {
listView.setAdapter(new ScheduleListAdapter(getActivity(), R.layout.station_row_item, schedule));
}
}
}
}
Foenix писал(а):а что до урока по сохранению данных вы не дочитали?
вертикальный скролл - компонент поищите на палитре скролвью кажется.
Foenix писал(а):Книжка по сети гуляет Харди, Филипс Программирование для андроид. Там фрагменты очень подробно рассмотрены на примерах, и вопрос поворотов тоже. Советую.
По сути там аналогично активностям можно сохранять все в onSaveInstance
да нет, не все так простоFastRus1804 писал(а):Foenix писал(а):Книжка по сети гуляет Харди, Филипс Программирование для андроид. Там фрагменты очень подробно рассмотрены на примерах, и вопрос поворотов тоже. Советую.
По сути там аналогично активностям можно сохранять все в onSaveInstance
То есть нужно было прописать setRetainInstance(true); и все XD
Спасибо. Хорошая книга.
Foenix писал(а):да нет, не все так простоFastRus1804 писал(а):Foenix писал(а):Книжка по сети гуляет Харди, Филипс Программирование для андроид. Там фрагменты очень подробно рассмотрены на примерах, и вопрос поворотов тоже. Советую.
По сути там аналогично активностям можно сохранять все в onSaveInstance
То есть нужно было прописать setRetainInstance(true); и все XD
Спасибо. Хорошая книга.
Код: Выделить всё
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState==null){
pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
Random r = new Random();
backColor = Color.argb(40, r.nextInt(255), r.nextInt(255), r.nextInt(255));}
else
{
backColor = savedInstanceState.getInt("backColor", 0);
pageNumber = savedInstanceState.getInt("pageNumber", 0);
}
//setRetainInstance(true);
}
Код: Выделить всё
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("pageNumber", pageNumber);
outState.putInt("backColor", backColor);
}
Использовал и к ListView и к ViewPager. Я вот уже думаю, может надо как то убить фрагмент в котором находиться список, а потом его пересоздать? Проблема в том, что ViewPager хранит в памяти как минимум три фрагмента - открытый, предыдущий и следующий за открытым.finberg писал(а):adapter относится к ListView или ViewPager?
Все, разобрался)prometey писал(а):Использовал и к ListView и к ViewPager. Я вот уже думаю, может надо как то убить фрагмент в котором находиться список, а потом его пересоздать? Проблема в том, что ViewPager хранит в памяти как минимум три фрагмента - открытый, предыдущий и следующий за открытым.finberg писал(а):adapter относится к ListView или ViewPager?
можно уменьшить кол-во страниц в памяти - pager.setOffscreenPageLimit(0);prometey писал(а):Использовал и к ListView и к ViewPager. Я вот уже думаю, может надо как то убить фрагмент в котором находиться список, а потом его пересоздать? Проблема в том, что ViewPager хранит в памяти как минимум три фрагмента - открытый, предыдущий и следующий за открытым.finberg писал(а):adapter относится к ListView или ViewPager?