用两个ListView实现简单的分类页面
首先看一下效果
依赖
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'io.reactivex:rxjava:1.1.0'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
先来看一下布局
activity_main
<LinearLayout 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:orientation="horizontal"
android:layout_height="match_parent"
tools:context="com.example.e6classify.MainActivity">
<ListView
android:id="@+id/left_lv"
android:layout_width="200dp"
android:layout_height="match_parent"></ListView>
<ListView
android:id="@+id/right_lv"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
left_item
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_left"
android:textSize="25sp"
android:layout_marginTop="30dp"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
right_list_item
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="@android:color/black"
android:id="@+id/tv_right_title"
/>
<com.example.e6classify.RightGridView
android:id="@+id/gv_right"
android:numColumns="3"
android:stretchMode="columnWidth"
android:layout_width="match_parent"
android:layout_height="wrap_content"
></com.example.e6classify.RightGridView>
</LinearLayout>
right_grid_item
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/right_grid_title"
android:layout_width="wrap_content"
android:layout_margin="5dp"
android:textSize="15sp"
android:layout_height="wrap_content" />
</LinearLayout>
实现网格布局的类
public class RightGridView extends GridView {
public RightGridView(Context context) {
super(context);
}
public RightGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RightGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expendSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expendSpec);
}
}
请求网络数据的类
MODEL
public interface IGetLeftData {
public void getLeftData(Callback callback);
}
public class GetLeftData implements IGetLeftData {
@Override
public void getLeftData(Callback callback) {
OkHttpUtils.getInstance().doGet("http://169.254.194.209/mobile/index.php?act=goods_class",callback);
}
}
VIEW
public interface IShowLeftData {
public void showLeftData(List<ClassifyLeft.DatasBean.ClassListBean> leftlist);
}
PRESENTER
public class LeftPresenter {
Context context;
List<ClassifyLeft.DatasBean.ClassListBean> leftlist=new ArrayList<>();
IShowLeftData leftview;
GetLeftData leftmodel;
public LeftPresenter(Context context, IShowLeftData leftview) {
this.context = context;
this.leftview = leftview;
leftmodel=new GetLeftData();
}
public void lfpShowData(){
leftmodel.getLeftData(new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
}
@Override
public void onSuccess(String result) {
Gson gson=new Gson();
ClassifyLeft leftdata=gson.fromJson(result,ClassifyLeft.class);
leftlist.addAll(leftdata.getDatas().getClass_list());
leftview.showLeftData(leftlist);
}
});
}
}
下面就是适配器了
左边的适配器
public class LeftListViewAdapter extends BaseAdapter {
Context context;
List<ClassifyLeft.DatasBean.ClassListBean> leftlist;
public LeftListViewAdapter(Context context, List<ClassifyLeft.DatasBean.ClassListBean> leftlist) {
this.context = context;
this.leftlist = leftlist;
}
@Override
public int getCount() {
return leftlist!=null?leftlist.size():0;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LeftViewHolder holder;
if(view==null){
view=View.inflate(context, R.layout.left_item,null);
holder=new LeftViewHolder();
holder.tv_left=view.findViewById(R.id.tv_left);
view.setTag(holder);
}else{
holder= (LeftViewHolder) view.getTag();
}
holder.tv_left.setText(leftlist.get(position).getGc_name());
return view;
}
public static class LeftViewHolder{
TextView tv_left;
}
}
右边的适配器
public class RightListViewAdapter extends BaseAdapter{
Context context;
List<ClassifyRight.DatasBean.ClassListBean> rightlist;
public RightListViewAdapter(Context context, List<ClassifyRight.DatasBean.ClassListBean> rightlist) {
this.context = context;
this.rightlist = rightlist;
}
@Override
public int getCount() {
return rightlist!=null?rightlist.size():0;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
RightViewHolder holder;
if (view==null){
view=View.inflate(context, R.layout.right_list_item,null);
holder=new RightViewHolder();
holder.tv_right_title=view.findViewById(R.id.tv_right_title);
holder.gv_right=view.findViewById(R.id.gv_right);
view.setTag(holder);
}else {
holder= (RightViewHolder) view.getTag();
}
holder.tv_right_title.setText(rightlist.get(position).getGc_name());
List<String> list=new ArrayList<>();
for(int i=0;i<rightlist.get(position).getChild().size();i++){
list.add(rightlist.get(position).getChild().get(i).getGc_name());
}
RightGridViewAdapter viewAdapter=new RightGridViewAdapter(context,list);
holder.gv_right.setAdapter(viewAdapter);
return view;
}
public static class RightViewHolder{
TextView tv_right_title;
GridView gv_right;
}
}
网格布局的适配器
public class RightGridViewAdapter extends BaseAdapter {
Context context;
List<String> list;
public RightGridViewAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list!=null?list.size():0;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
RightGridViewHolder holder;
if (view==null){
view=View.inflate(context, R.layout.right_grid_item,null);
holder=new RightGridViewHolder();
holder.right_grid_title=view.findViewById(R.id.right_grid_title);
view.setTag(holder);
}else{
holder= (RightGridViewHolder) view.getTag();
}
holder.right_grid_title.setText(list.get(position));
return view;
}
public static class RightGridViewHolder{
TextView right_grid_title;
}
}
MainActivity中
public class MainActivity extends AppCompatActivity implements IShowLeftData{
ListView mLeftLv, mRightLv;
List<ClassifyLeft.DatasBean.ClassListBean> leftlist = new ArrayList<>();
List<ClassifyRight.DatasBean.ClassListBean> rightlist = new ArrayList<>();
LeftPresenter leftPresenter;
LeftListViewAdapter leftadapter;
RightListViewAdapter rightadapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
leftPresenter = new LeftPresenter(this, this);
leftPresenter.lfpShowData();
}
@Override
public void showLeftData(List<ClassifyLeft.DatasBean.ClassListBean> leftlist) {
this.leftlist=leftlist;
leftadapter = new LeftListViewAdapter(this, leftlist);
mLeftLv.setAdapter(leftadapter);
}
private void initView() {
mLeftLv =findViewById(R.id.left_lv);
mRightLv =findViewById(R.id.right_lv);
}
private void initData() {
showLeftData(leftlist);
getRightNetData("1");
mLeftLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
getRightNetData(leftlist.get(position).getGc_id());
}
});
rightadapter=new RightListViewAdapter(this,rightlist);
mRightLv.setAdapter(rightadapter);
}
private void getRightNetData(String type) {
OkHttpUtils.getInstance().doGet("http://169.254.194.209/mobile/index.php?act=goods_class&op=get_child_all&gc_id=" + type, new OnUiCallback() {
@Override
public void onFailed(Call call, IOException e) {
}
@Override
public void onSuccess(String result) {
Gson gson = new Gson();
ClassifyRight rightJson = gson.fromJson(result, ClassifyRight.class);
rightlist.clear();
rightlist.addAll(rightJson.getDatas().getClass_list());
rightadapter.notifyDataSetChanged();
}
});
}
}