package zaihuishou.com.expandablerecyclerview;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.zaihuishou.expandablerecycleradapter.adapter.BaseExpandableAdapter;
import com.zaihuishou.expandablerecycleradapter.viewholder.AbstractAdapterItem;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private final int ITEM_TYPE_COMPANY = 1;
private final int ITEM_TYPE_DEPARTMENT = 2;
private final int ITEM_TYPE_EMPLOYEE = 3;
private RecyclerView mRecyclerView;
private BaseExpandableAdapter mBaseExpandableAdapter;
private List mCompanylist;
private boolean hasAdd = false;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mRecyclerView = (RecyclerView) findViewById(R.id.rcv);
final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mRecyclerView != null) {
/**
* collapse all parents
*/
// mBaseExpandableAdapter.collapseAllParents(false);
/**
* change item
*/
Company company = (Company) mBaseExpandableAdapter.getDataList().get(0);
company.name = company.name + "-has changed";
mBaseExpandableAdapter.modifyItem(0, company);
/**
* expand specified parent item
*/
// mBaseExpandableAdapter.expandParent(0);
// if (!hasAdd) {
// Department department = new Department();
// department.name = "Add a department";
// mBaseExpandableAdapter.addItem(department);
// hasAdd = true;
// fab.setImageResource(android.R.drawable.ic_delete);
// Snackbar.make(view, "add item", Snackbar.LENGTH_SHORT).show();
// } else {
// mBaseExpandableAdapter.removedItem(mBaseExpandableAdapter.getItemCount() - 1);
// hasAdd = false;
// fab.setImageResource(android.R.drawable.ic_input_add);
// Snackbar.make(view, "delete item", Snackbar.LENGTH_SHORT).show();
// }
}
}
});
initData();
mBaseExpandableAdapter = new BaseExpandableAdapter(mCompanylist) {
@NonNull
@Override
public AbstractAdapterItem<Object> getItemView(Object type) {
int itemType = (int) type;
switch (itemType) {
case ITEM_TYPE_COMPANY:
return new CompanyItem();
case ITEM_TYPE_DEPARTMENT:
return new DepartmentItem();
case ITEM_TYPE_EMPLOYEE:
return new EmployeeItem();
}
return null;
}
@Override
public Object getItemViewType(Object t) {
if (t instanceof Company) {
return ITEM_TYPE_COMPANY;
} else if (t instanceof Department)
return ITEM_TYPE_DEPARTMENT;
else if (t instanceof Employee)
return ITEM_TYPE_EMPLOYEE;
return -1;
}
};
/**
* LinearLayoutManager
*/
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
/**
* GridLayoutManager
*/
// mRecyclerView.setLayoutManager(new GridLayoutManager(this,2));
mRecyclerView.setAdapter(mBaseExpandableAdapter);
/**
* set ExpandCollapseListener
*/
mBaseExpandableAdapter.setExpandCollapseListener(new BaseExpandableAdapter.ExpandCollapseListener() {
@Override
public void onListItemExpanded(int position) {
}
@Override
public void onListItemCollapsed(int position) {
}
});
}
private void initData() {
mCompanylist = new ArrayList<>();
mCompanylist.add(createCompany("Google", true));
mCompanylist.add(createCompany("Apple", false));
}
@NonNull
private Company createCompany(String companyName, boolean isExpandDefault) {
Company firstCompany = new Company();
firstCompany.name = companyName;
List<Department> departments = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Department department = new Department();
department.name = "Department:" + i;
if (i == 0) {
department.setExpanded(true);
List<Employee> employeeList = new ArrayList<>();
for (int j = 0; j < 10; j++) {
Employee employee = new Employee();
employee.name = "Employee:" + j;
employeeList.add(employee);
}
department.mEmployees = employeeList;
}
departments.add(department);
}
firstCompany.mDepartments = departments;
firstCompany.mExpanded = isExpandDefault;
return firstCompany;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}