我正在尝试实现类似于视图寻呼机向导(活动中的两个步骤),其中我正在尝试在视图寻呼机内实现回收站视图。寻呼机中的第一个视图/布局包括一个回收者视图,在该视图中,允许用户从列表中选择一个区域,选择寻呼机将调用第二个视图/布局的区域,以便用户输入其他信息
现在,无论我做什么,回收站视图都不会显示在视图寻呼机内。我想我搞砸了我的布局。有帮助吗?感谢
AreaActivity
public class AreaActivity extends AppCompatActivity implements View.OnClickListener {
private ViewPager viewPager;
private ViewPagerAdapter adapter;
private RecyclerView recyclerView;
private TechAreaAdapter tAdapter;
private List<TechAreas> _techAreaList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tech_areas);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
viewPager = (ViewPager) findViewById(R.id.viewPagerVertical);
adapter = new ViewPagerAdapter();
viewPager.setAdapter(adapter);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
_techAreaList = new ArrayList<>();
tAdapter = new TechAreaAdapter(this, _techAreaList);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 3);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.addItemDecoration(new GridSpacingItemDecoration(3, dpToPx(10), true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(tAdapter);
// row click listener
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView, new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, int position) {
TechAreas techAreas = _techAreaList.get(position);
//onclick move to the next view in the pager - viewPager.setCurrentItem(1);
}
@Override
public void onLongClick(View view, int position) {
}
}));
getTechAreaList();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
//Test
}
}
private void getTechAreaList() {
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<List<TechAreas>> call = apiService.getTechAreaList();
call.enqueue(new Callback<List<TechAreas>>() {
@Override
public void onResponse(Call<List<TechAreas>> call, Response<List<TechAreas>> response) {
_techAreaList.clear();
_techAreaList.addAll(response.body());
tAdapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<List<TechAreas>> call, Throwable t) {
Toast.makeText(getApplicationContext(), "Unable to fetch json: " + t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
/**
* RecyclerView item decoration - give equal margin around grid item
*/
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
private int spanCount;
private int spacing;
private boolean includeEdge;
public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
this.spanCount = spanCount;
this.spacing = spacing;
this.includeEdge = includeEdge;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view); // item position
int column = position % spanCount; // item column
if (includeEdge) {
outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)
if (position < spanCount) { // top edge
outRect.top = spacing;
}
outRect.bottom = spacing; // item bottom
} else {
outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f / spanCount) * spacing)
if (position >= spanCount) {
outRect.top = spacing; // item top
}
}
}
}
/**
* Converting dp to pixel
*/
private int dpToPx(int dp) {
Resources r = getResources();
return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()));
}
class ViewPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return 2;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((View) object);
}
public Object instantiateItem(View collection, int position) {
int resId = 0;
switch (position) {
case 0:
resId = R.id.layout_choose_area;
break;
case 1:
resId = R.id.layout_add_info;
break;
}
return findViewById(resId);
}
}}
主要布局
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:mContext="AreaActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_tech_areas" />
</android.support.design.widget.CoordinatorLayout>
内容布局
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_tech_areas">
<CustomViewPager
android:id="@+id/viewPagerVertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<android.support.constraint.ConstraintLayout
android:id="@+id/layout_choose_area"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</android.support.constraint.ConstraintLayout>
<LinearLayout
android:id="@+id/layout_add_info"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/colorPrimary"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView/>
<EditText
android:id="@+id/input_interest"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:hint="@string/lbl_enter_interest"
android:padding="10dp" />
</LinearLayout>
</CustomViewPager>
</android.support.constraint.ConstraintLayout>
自定义视图寻呼机
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}}