Skip to content

Commit d1241f2

Browse files
committed
Added example for multiple view types.
1 parent b70a426 commit d1241f2

14 files changed

Lines changed: 409 additions & 56 deletions

File tree

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
</intent-filter>
1818
</activity>
1919

20-
<activity android:name=".single_view_type.SingleViewTypePagerActivity"
20+
<activity android:name=".single_view_type.PagerActivity"
2121
android:label="@string/single_view_type">
2222

2323
</activity>
2424

25-
<activity android:name=".multi_view_type.MultiViewTypePagerActivity"
25+
<activity android:name=".multi_view_type.PagerActivity"
2626
android:label="@string/multi_view_type">
2727

2828
</activity>

app/src/main/java/com/quarkworks/dynamicviewpager_demo/MainActivity.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import android.support.v7.app.AppCompatActivity;
66
import android.view.View;
77

8-
import com.quarkworks.dynamicviewpager_demo.multi_view_type.MultiViewTypePagerActivity;
9-
import com.quarkworks.dynamicviewpager_demo.single_view_type.SingleViewTypePagerActivity;
8+
import com.quarkworks.dynamicviewpager_demo.multi_view_type.PagerActivity;
109

1110
/**
1211
* @author jacobamuchow@gmail.com
@@ -32,15 +31,15 @@ protected void onCreate(Bundle savedInstanceState) {
3231
private final View.OnClickListener singleClickListener = new View.OnClickListener() {
3332
@Override
3433
public void onClick(View view) {
35-
Intent intent = SingleViewTypePagerActivity.newIntent(MainActivity.this);
34+
Intent intent = com.quarkworks.dynamicviewpager_demo.single_view_type.PagerActivity.newIntent(MainActivity.this);
3635
startActivity(intent);
3736
}
3837
};
3938

4039
private final View.OnClickListener multiClickListener = new View.OnClickListener() {
4140
@Override
4241
public void onClick(View view) {
43-
Intent intent = MultiViewTypePagerActivity.newIntent(MainActivity.this);
42+
Intent intent = PagerActivity.newIntent(MainActivity.this);
4443
startActivity(intent);
4544
}
4645
};
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.quarkworks.dynamicviewpager_demo.multi_view_type;
2+
3+
import android.content.Context;
4+
import android.graphics.Color;
5+
import android.support.annotation.Nullable;
6+
import android.util.AttributeSet;
7+
import android.view.LayoutInflater;
8+
import android.view.View;
9+
import android.widget.RelativeLayout;
10+
import android.widget.TextView;
11+
12+
import com.quarkworks.dynamicviewpager_demo.R;
13+
14+
/**
15+
* @author jacobamuchow@gmail.com (Jacob Muchow)
16+
*/
17+
public class BlueCardView extends RelativeLayout {
18+
private static final String TAG = BlueCardView.class.getSimpleName();
19+
20+
private int position = 0;
21+
22+
private TextView textView;
23+
24+
@Nullable
25+
private PagerViewCallbacks pagerViewCallbacks;
26+
27+
public BlueCardView(Context context) {
28+
super(context);
29+
initialize();
30+
}
31+
32+
public BlueCardView(Context context, AttributeSet attrs) {
33+
super(context, attrs);
34+
initialize();
35+
}
36+
37+
public BlueCardView(Context context, AttributeSet attrs, int defStyleAttr) {
38+
super(context, attrs, defStyleAttr);
39+
initialize();
40+
}
41+
42+
private void initialize() {
43+
LayoutInflater.from(getContext()).inflate(R.layout.pager_card_view, this);
44+
45+
View cardContainer = findViewById(R.id.pager_card_view_card_container);
46+
textView = (TextView) findViewById(R.id.pager_card_view_text);
47+
View dismissButton = findViewById(R.id.pager_card_view_dismiss_button);
48+
49+
dismissButton.setOnClickListener(new OnClickListener() {
50+
@Override
51+
public void onClick(View v) {
52+
if(pagerViewCallbacks != null) {
53+
pagerViewCallbacks.dismissClicked(position);
54+
}
55+
}
56+
});
57+
58+
cardContainer.setBackgroundColor(Color.BLUE);
59+
}
60+
61+
public void setViewData(int position) {
62+
this.position = position;
63+
textView.setText(String.valueOf(position));
64+
}
65+
66+
public int getPosition() {
67+
return position;
68+
}
69+
70+
public void setPagerViewCallbacks(@Nullable PagerViewCallbacks pagerViewCallbacks) {
71+
this.pagerViewCallbacks = pagerViewCallbacks;
72+
}
73+
74+
public interface PagerViewCallbacks {
75+
void dismissClicked(int position);
76+
}
77+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.quarkworks.dynamicviewpager_demo.multi_view_type;
2+
3+
import android.content.Context;
4+
import android.graphics.Color;
5+
import android.support.annotation.Nullable;
6+
import android.util.AttributeSet;
7+
import android.view.LayoutInflater;
8+
import android.view.View;
9+
import android.widget.RelativeLayout;
10+
import android.widget.TextView;
11+
12+
import com.quarkworks.dynamicviewpager_demo.R;
13+
14+
/**
15+
* @author jacobamuchow@gmail.com (Jacob Muchow)
16+
*/
17+
public class GreenCardView extends RelativeLayout {
18+
private static final String TAG = GreenCardView.class.getSimpleName();
19+
20+
private int position = 0;
21+
22+
private TextView textView;
23+
24+
@Nullable
25+
private PagerViewCallbacks pagerViewCallbacks;
26+
27+
public GreenCardView(Context context) {
28+
super(context);
29+
initialize();
30+
}
31+
32+
public GreenCardView(Context context, AttributeSet attrs) {
33+
super(context, attrs);
34+
initialize();
35+
}
36+
37+
public GreenCardView(Context context, AttributeSet attrs, int defStyleAttr) {
38+
super(context, attrs, defStyleAttr);
39+
initialize();
40+
}
41+
42+
private void initialize() {
43+
LayoutInflater.from(getContext()).inflate(R.layout.pager_card_view, this);
44+
45+
View cardContainer = findViewById(R.id.pager_card_view_card_container);
46+
textView = (TextView) findViewById(R.id.pager_card_view_text);
47+
View dismissButton = findViewById(R.id.pager_card_view_dismiss_button);
48+
49+
dismissButton.setOnClickListener(new OnClickListener() {
50+
@Override
51+
public void onClick(View v) {
52+
if(pagerViewCallbacks != null) {
53+
pagerViewCallbacks.dismissClicked(position);
54+
}
55+
}
56+
});
57+
58+
cardContainer.setBackgroundColor(Color.GREEN);
59+
}
60+
61+
public void setViewData(int position) {
62+
this.position = position;
63+
textView.setText(String.valueOf(position));
64+
}
65+
66+
public int getPosition() {
67+
return position;
68+
}
69+
70+
public void setPagerViewCallbacks(@Nullable PagerViewCallbacks pagerViewCallbacks) {
71+
this.pagerViewCallbacks = pagerViewCallbacks;
72+
}
73+
74+
public interface PagerViewCallbacks {
75+
void dismissClicked(int position);
76+
}
77+
}

app/src/main/java/com/quarkworks/dynamicviewpager_demo/multi_view_type/MultiViewTypePagerActivity.java

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.quarkworks.dynamicviewpager_demo.multi_view_type;
2+
3+
import android.content.Context;
4+
import android.content.Intent;
5+
import android.os.Bundle;
6+
import android.support.annotation.Nullable;
7+
import android.support.v4.view.ViewPager;
8+
import android.support.v7.app.AppCompatActivity;
9+
10+
import com.quarkworks.dynamicviewpager_demo.R;
11+
12+
/**
13+
* @author jacobamuchow@gmail.com (Jacob Muchow)
14+
*/
15+
public class PagerActivity extends AppCompatActivity {
16+
private static final String TAG = PagerActivity.class.getSimpleName();
17+
18+
public static Intent newIntent(Context context) {
19+
return new Intent(context, PagerActivity.class);
20+
}
21+
22+
@Override
23+
protected void onCreate(@Nullable Bundle savedInstanceState) {
24+
super.onCreate(savedInstanceState);
25+
setContentView(R.layout.pager_activity);
26+
27+
ViewPager viewPager = (ViewPager) findViewById(R.id.pager_activity_view_pager);
28+
29+
viewPager.setPageMarginDrawable(null);
30+
viewPager.setPageMargin(30);
31+
viewPager.setOffscreenPageLimit(2);
32+
33+
34+
PagerAdapter pagerAdapter = new PagerAdapter();
35+
viewPager.setAdapter(pagerAdapter);
36+
}
37+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package com.quarkworks.dynamicviewpager_demo.multi_view_type;
2+
3+
import android.view.View;
4+
import android.view.ViewGroup;
5+
6+
import com.quarkworks.dynamicviewpager.DynamicPagerAdapter;
7+
8+
import java.util.ArrayList;
9+
10+
/**
11+
* @author jacobamuchow@gmail.com (Jacob Muchow)
12+
*/
13+
public class PagerAdapter extends DynamicPagerAdapter {
14+
private static final String TAG = PagerAdapter.class.getSimpleName();
15+
16+
public static final class ViewTypes {
17+
public static final int BLUE = 0;
18+
public static final int GREEN = 1;
19+
public static final int RED = 2;
20+
}
21+
22+
private ArrayList<Integer> values = new ArrayList<>();
23+
24+
public PagerAdapter() {
25+
for(int i = 0; i < 30; i++) {
26+
values.add(i);
27+
}
28+
29+
setCallbacks(new Callbacks() {
30+
@Override
31+
public void onDiscardFinished(int position, View view) {
32+
if(position != NO_POSITION) {
33+
values.remove(position);
34+
}
35+
notifyDataSetChanged();
36+
}
37+
});
38+
}
39+
40+
@Override
41+
public ViewHolder onCreateViewHolder(ViewGroup container, int viewType) {
42+
final View view;
43+
44+
if (viewType == ViewTypes.BLUE) {
45+
view = new BlueCardView(container.getContext());
46+
47+
((BlueCardView) view).setPagerViewCallbacks(new BlueCardView.PagerViewCallbacks() {
48+
@Override
49+
public void dismissClicked(int position) {
50+
discardView(view);
51+
}
52+
});
53+
54+
} else if (viewType == ViewTypes.GREEN) {
55+
view = new GreenCardView(container.getContext());
56+
57+
((GreenCardView) view).setPagerViewCallbacks(new GreenCardView.PagerViewCallbacks() {
58+
@Override
59+
public void dismissClicked(int position) {
60+
discardView(view);
61+
}
62+
});
63+
64+
} else {
65+
view = new RedCardView(container.getContext());
66+
67+
((RedCardView) view).setPagerViewCallbacks(new RedCardView.PagerViewCallbacks() {
68+
@Override
69+
public void dismissClicked(int position) {
70+
discardView(view);
71+
}
72+
});
73+
}
74+
75+
return new ViewHolder(view) {};
76+
}
77+
78+
@Override
79+
public void onBindViewHolder(ViewHolder viewHolder, int position) {
80+
81+
int value = values.get(position);
82+
83+
if (viewHolder.viewType == ViewTypes.BLUE) {
84+
((BlueCardView) viewHolder.view).setViewData(value);
85+
86+
} else if (viewHolder.viewType == ViewTypes.GREEN) {
87+
((GreenCardView) viewHolder.view).setViewData(value);
88+
89+
} else {
90+
((RedCardView) viewHolder.view).setViewData(value);
91+
}
92+
}
93+
94+
@Override
95+
public int getViewType(int position) {
96+
return values.get(position) % 3;
97+
}
98+
99+
@Override
100+
public int getCount() {
101+
return values.size();
102+
}
103+
}

0 commit comments

Comments
 (0)