Nestable view pager is pretty cool

pull/14/head
Tim Su 13 years ago
parent 493ea204c9
commit 198dd3e8cf

@ -106,7 +106,7 @@
android:layout_weight="1"
android:visibility="gone" />
<android.support.v4.view.ViewPager
<com.todoroo.astrid.ui.NestableViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

@ -95,6 +95,7 @@ import com.todoroo.astrid.ui.EditNotesControlSet;
import com.todoroo.astrid.ui.EditTitleControlSet;
import com.todoroo.astrid.ui.HideUntilControlSet;
import com.todoroo.astrid.ui.ImportanceControlSet;
import com.todoroo.astrid.ui.NestableViewPager;
import com.todoroo.astrid.ui.ReminderControlSet;
import com.todoroo.astrid.ui.TaskEditMoreControls;
import com.todoroo.astrid.ui.WebServicesView;
@ -205,7 +206,7 @@ public final class TaskEditFragment extends Fragment implements
private EditText title;
private TaskEditMoreControls moreControls;
private EditNoteActivity editNotes;
private ViewPager mPager;
private NestableViewPager mPager;
private TaskEditViewPager mAdapter;
private TabPageIndicator mIndicator;
@ -425,8 +426,9 @@ public final class TaskEditFragment extends Fragment implements
mAdapter = new TaskEditViewPager(getActivity(), tabStyle);
mAdapter.parent = this;
mPager = (ViewPager) getView().findViewById(R.id.pager);
mPager = (NestableViewPager) getView().findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mPager.setScrollabelViews(webServices.getScrollableViews());
mIndicator = (TabPageIndicator) getView().findViewById(
R.id.indicator);

@ -0,0 +1,29 @@
package com.todoroo.astrid.ui;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewParent;
public class NestableViewPager extends ViewPager {
private int[] scrollableViews = new int[0];
public NestableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
for(int i = 0; i < scrollableViews.length; i++) {
View view = findViewById(scrollableViews[i]);
if (view instanceof ViewParent)
((ViewParent)view).requestDisallowInterceptTouchEvent(true);
}
return super.onInterceptTouchEvent(event);
}
public void setScrollabelViews(int[] views) {
this.scrollableViews = views;
}
}

@ -36,7 +36,6 @@ import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.service.HttpErrorException;
import com.todoroo.andlib.service.RestClient;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.AmazonRequestsHelper;
@ -50,6 +49,9 @@ public class WebServicesView extends LinearLayout {
private static final int ROW_HEIGHT = 100;
private static final int ID_AMAZON = 0x3423712;
private static final int ID_GOOGLE = 0x3487532;
private static final String GOOGLE_SEARCH_URL = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
private Task task;
@ -77,6 +79,10 @@ public class WebServicesView extends LinearLayout {
initialize();
}
public int[] getScrollableViews() {
return new int[] { ID_AMAZON, ID_GOOGLE };
}
/**
* Initialize view
*/
@ -108,7 +114,7 @@ public class WebServicesView extends LinearLayout {
protected void initializeAmazon() {
addSectionHeader("Amazon.com");
final LinearLayout body = addHorizontalScroller();
final LinearLayout body = addHorizontalScroller(ID_AMAZON);
new Thread() {
@Override
@ -181,7 +187,7 @@ public class WebServicesView extends LinearLayout {
} else if("Error".equals(xpp.getName())) {
while(!"Message".equals(xpp.getName()))
xpp.next();
throw new HttpErrorException(0, xpp.getText());
throw new AmazonException(xpp.nextText());
}
} else if(eventType == XmlPullParser.END_TAG) {
if("Item".equals(xpp.getName()))
@ -216,6 +222,15 @@ public class WebServicesView extends LinearLayout {
}
}
private class AmazonException extends Exception {
private static final long serialVersionUID = -3759207030258905605L;
public AmazonException(String arg0) {
super(arg0);
}
}
/**
* Initialize Google search results
@ -223,7 +238,7 @@ public class WebServicesView extends LinearLayout {
protected void initializeGoogleSearch() {
addSectionHeader("Google Search");
final LinearLayout body = addHorizontalScroller();
final LinearLayout body = addHorizontalScroller(ID_GOOGLE);
new Thread() {
@Override
@ -326,10 +341,11 @@ public class WebServicesView extends LinearLayout {
});
}
protected LinearLayout addHorizontalScroller() {
protected LinearLayout addHorizontalScroller(int id) {
HorizontalScrollView scroll = new HorizontalScrollView(getContext());
scroll.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
scroll.setId(id);
addView(scroll);
LinearLayout body = new LinearLayout(getContext());

Loading…
Cancel
Save