Reputation: 5761
I've created an app that utilizes ListView and now I would like to display in a TabLayout, I've Googled this but none of the suggested solutions worked properly.
The tab layout itself is built as so:
PageAdapter
public class PageAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
public PageAdapter(FragmentManager fm, int NumOfTabs) {
super(fm);
this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
AllTasksTabFragment tab1 = new AllTasksTabFragment();
return tab1;
case 1:
WaitingTasksTabFragment tab2 = new WaitingTasksTabFragment();
return tab2;
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
AllTasksTabFragment
public class AllTasksTabFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.all_tasks, container, false);
}
}
Main Layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="il.ac.shenkar.david.todolistex2.Main2Activity"
tools:showIn="@layout/activity_main2">
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/toolbar"
android:background="?attr/colorPrimary"
android:elevation="6dp"
android:minHeight="?attr/actionBarSize"/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_below="@id/tab_layout"/>
</RelativeLayout>
AllTasks tab layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:id="@+id/Main2ActivitylinearLayout3">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="right"
android:paddingRight="10dp"
android:text=""
android:id="@+id/totalTask"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:id="@+id/Main2ActivitylinearLayout">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="5dp"
android:paddingRight="8dp"
android:text="Sort:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Spinner android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/sort_array"
android:id="@+id/sortSpinner"
android:gravity="center"
android:textAlignment="center"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:id="@+id/Main2ActivitylinearLayout2">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="No Tasks to Display"
android:layout_marginTop="60dp"
android:layout_marginLeft="60dp"
android:id="@+id/emptylist"
android:gravity="center"
android:layout_centerHorizontal="true"
android:textStyle="bold" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/alltab_emptylist"
android:layout_centerHorizontal="true" />
</LinearLayout>
Main Activity OnCreate
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
dbM = DBManager.getInstance(context);
total_tasks_text = (TextView) findViewById(R.id.totalTask);
if(Globals.diffusr)
{
dbM.clearDB();
}
//check if any tasks exist in Parse DB
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Task");
query.whereEqualTo("TeamName", Globals.team_name);
if (Globals.IsManager == false) {
SharedPreferences sharedpreferences = getSharedPreferences("il.ac.shenkar.david.todolistex2", Context.MODE_PRIVATE);
query.whereEqualTo("Employee", sharedpreferences.getString("LoginUsr", null));
//if not manager disable action button
FloatingActionButton fbtn = (FloatingActionButton) findViewById(R.id.fab);
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fbtn.getLayoutParams();
p.setBehavior(null); //should disable default animations
p.setAnchorId(View.NO_ID); //should let you set visibility
fbtn.setLayoutParams(p);
fbtn.setVisibility(View.GONE);
}
itemListAllTasks = new ArrayList<Task>();
itemListWaitingTasks = new ArrayList<Task>();
all_list = (ListView) findViewById(R.id.alltasks_listView);
waiting_list = (ListView) findViewById(R.id.waitingtasks_listView);
try {
tsks = query.find();
for (ParseObject tmp : tsks) {
tmp_task = new Task();
tmp_task.setDescription(tmp.getString("Description"));
int position = tmp.getInt("Category");
switch (position) {
case 0:
tmp_task.setTask_catg(Category.GENERAL);
break;
case 1:
tmp_task.setTask_catg(Category.CLEANING);
break;
case 2:
tmp_task.setTask_catg(Category.ELECTRICITY);
break;
case 3:
tmp_task.setTask_catg(Category.COMPUTERS);
break;
case 4:
tmp_task.setTask_catg(Category.OTHER);
break;
}
position = tmp.getInt("Priority");
switch (position) {
case 0:
tmp_task.setPriority(Priority.LOW);
break;
case 1:
tmp_task.setPriority(Priority.NORMAL);
break;
case 2:
tmp_task.setPriority(Priority.URGENT);
break;
default:
tmp_task.setPriority(Priority.NORMAL);
break;
}
position = tmp.getInt("Status");
switch (position) {
case 0:
tmp_task.setTask_sts(Task_Status.WAITING);
break;
case 1:
tmp_task.setTask_sts(Task_Status.INPROGESS);
break;
case 2:
tmp_task.setTask_sts(Task_Status.DONE);
break;
default:
tmp_task.setTask_sts(Task_Status.WAITING);
break;
}
position = tmp.getInt("Location");
switch (position) {
case 0:
tmp_task.setTsk_location(position);
break;
case 1:
tmp_task.setTsk_location(position);
break;
case 2:
tmp_task.setTsk_location(position);
break;
case 3:
tmp_task.setTsk_location(position);
break;
case 4:
tmp_task.setTsk_location(position);
break;
default:
tmp_task.setTsk_location(position);
break;
}
tmp_task.setDueDate(tmp.getDate("DueDate"));
tmp_task.setParse_task_id(tmp.getObjectId());
tmp_task.setEmp_name(tmp.getString("Employee"));
syncTaskList(tmp_task);
}
} catch (ParseException e) {
}
itemListAllTasks = dbM.getAllTasks();
all_list.setAdapter(new TaskItemAdapter(context, itemListAllTasks));
itemListWaitingTasks = dbM.getSortedTasks(Sorting.fromInteger(Sorting.WAITING.ordinal()));
waiting_list.setAdapter(new TaskItemAdapter(context, itemListWaitingTasks));
all_list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long arg3) {
//get item instance from list
Task tt = (Task) ((TaskItemAdapter) parent.getAdapter()).getItem(position);
if (Globals.IsManager == true) {
Globals.temp = tt.getTsk_location();
//start the create activity again, now for editing
Intent i = new Intent(getApplicationContext(), EditTaskActivity.class);
i.putExtra("task", tt);
startActivityForResult(i, REQUEST_CODE_UPDATE_TASK);
}
if (Globals.IsManager == false) {
//start the create activity again, now for editing
Intent i = new Intent(getApplicationContext(), ReportTaskStatus.class);
i.putExtra("task", tt);
startActivityForResult(i, REQUEST_CODE_EMP_VIEW_TASK);
}
return false;
}
});
waiting_list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long arg3) {
//get item instance from list
Task tt = (Task) ((TaskItemAdapter) parent.getAdapter()).getItem(position);
if (Globals.IsManager == true) {
Globals.temp=tt.getTsk_location();
//start the create activity again, now for editing
Intent i = new Intent(getApplicationContext(), EditTaskActivity.class);
i.putExtra("task", tt);
startActivityForResult(i, REQUEST_CODE_UPDATE_TASK);
}
if (Globals.IsManager == false) {
//start the create activity again, now for editing
Intent i = new Intent(getApplicationContext(), ReportTaskStatus.class);
i.putExtra("task", tt);
startActivityForResult(i, REQUEST_CODE_EMP_VIEW_TASK);
}
return false;
}
});
all_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(context, "Long press to edit task", Toast.LENGTH_SHORT).show();
}
});
waiting_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(context, "Long press to edit task", Toast.LENGTH_SHORT).show();
}
});
emptylist_txt = (TextView) findViewById(R.id.alltab_emptylist);
if (itemListAllTasks.size() == 0) {
emptylist_txt.setVisibility(View.VISIBLE);
total_tasks_text.setVisibility(View.GONE);
} else {
emptylist_txt.setVisibility(View.GONE);
total_tasks_text.setVisibility(View.VISIBLE);
total_tasks_text.setText("");
total_tasks_text.setText("Total " + itemListAllTasks.size());
}
sorts = getResources().getStringArray(R.array.sort_array);
sort_selector = (Spinner) findViewById(R.id.sortSpinner);
sortSpinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, sorts);
sortSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sort_selector.setAdapter(sortSpinnerAdapter);
sort_selector.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
Globals.last_sort = position;
SortTaskList(position);
}
public void onNothingSelected(AdapterView<?> parent) {
Toast.makeText(context, "Spinner1:no selection", Toast.LENGTH_SHORT).show();
}
});
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("All Tasks"));
tabLayout.addTab(tabLayout.newTab().setText("Waiting"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final PageAdapter adapter = new PageAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
How should I do this when using tabs? I have two tabs - AllTasks (which is displayed here) & Waiting (which is build in the same way). How do I sent the ListView for each of them? So when a user transitions between tabs, the correct list will be displayed.
Upvotes: 0
Views: 5761
Reputation: 1830
First Remove this listener from your activity code tabLayout.setOnTabSelectedListener . Then carry out like this.
Interface:
public interface DavidInterface
{
List<Task> getListData(int position);
}
PageAdapter;
public class PageAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
public PageAdapter(FragmentManager fm, int NumOfTabs) {
super(fm);
this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new yourOwnFragment();
Bundle bundle = new Bundle();
bundle.putInt("position",position);
fragment.setArguments(bundle);
return fragment;
}
@Override
public int getCount() {
return mNumOfTabs;
}
MainActivityOnCreate:
class MainActivity extends AppcompatActivity implements DavidInterface
{
Hashmap<Integer,List<Task>> task_list_map = new HashMap<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
task_list_map.add(listitem1);
task_list_map.add(listitem2);
}
//Interface method.
@Override
public List<Task> getListData(int position)
{
return task_list_map.get(position);
}
TabFragment:
public class AllTasksTabFragment extends Fragment
{ DavidInterface davidinterface;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.all_tasks, container, false);
davidinterface = (DavidInterface)getActivity();
Bundle bundle = getArguments();
int pager_position = bundle.getInt("position",position);
List<Task> task = davidinterface.getListData(pager_position);
//populate this data in your listview inside this fragment layout.
}
}
Upvotes: 1
Reputation: 6090
My fragment code R.layout.second_fragment it's layout with listview
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
v = inflater.inflate(R.layout.second_fragment, container, false);
listView = (ListView) v.findViewById(R.id.times_listView);
return v;
}
Upvotes: 0