[英]How to use ViewPager + Fragment +ListView
here is my Code,the Activity
is to show 7 tabs from Mon. 这是我的代码,
Activity
将显示星期一的7个选项卡。 to Sun.each tabs use the same fragment
,I wanna add a ListView
to load the imformation,but I don't how to do 到Sun.每个选项卡使用相同的
fragment
,我想添加一个ListView
来加载信息,但是我不怎么做
Activity: 活动:
package space.levan.myclass.activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import butterknife.Bind;
import butterknife.ButterKnife;
import it.neokree.materialtabs.MaterialTab;
import it.neokree.materialtabs.MaterialTabHost;
import it.neokree.materialtabs.MaterialTabListener;
import space.levan.myclass.R;
import space.levan.myclass.fragment.LessonFragment;
import space.levan.myclass.utils.InfoUtil;
import space.levan.myclass.utils.NetUtil;
/**
* Created by 339 on 2016/5/3.
*/
public class ScheduleActivity extends AppCompatActivity implements MaterialTabListener{
@Bind(R.id.materialTabHost)
MaterialTabHost mTabHost;
@Bind(R.id.pager)
ViewPager mViewPager;
ViewPagerAdapter adapter;
private List<HashMap<String, Object>> ClassInfos;
private HashMap<String, Object> ClassInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_schedule);
ButterKnife.bind(this);
setTitle("课程表");
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
Fragment lessonFragment;
adapter = new ViewPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// when user do a swipe the selected tab change
mTabHost.setSelectedNavigationItem(position);
}
});
// insert all tabs from pagerAdapter data
for (int i = 0; i < adapter.getCount(); i++) {
mTabHost.addTab(
mTabHost.newTab()
.setText(adapter.getPageTitle(i))
.setTabListener(this)
);
}
Calendar calendar = Calendar.getInstance();
int temp = calendar.get(Calendar.DAY_OF_WEEK) - 2;
mViewPager.setCurrentItem(temp);
Map<String, String> loginInfo = InfoUtil.getLoginInfo(ScheduleActivity.this);
getLesson(loginInfo.get("StuToken"));
}
public String getLesson(final String mToken) {
new Thread() {
public void run() {
String result = NetUtil.getSchedule(mToken);
if (result != null) {
try {
JSONObject jsonObject = new JSONObject(result);
int error = jsonObject.getInt("error");
String message = jsonObject.getString("message");
switch (error) {
case 0:
getDes(jsonObject);
break;
case 1:
showToast(message);
break;
case 2:
reLogin();
break;
default:
break;
}
}catch (Exception e) {
e.printStackTrace();
}
} else {
showToast("数据异常");
}
}
}.start();
return null;
}
private void getDes(JSONObject jsonObject) {
try {
JSONObject Object = jsonObject.getJSONObject("data");
JSONObject data = Object.getJSONObject("data");
for (int i = 1; i < 7; i++) {
JSONObject day = data.getJSONObject(""+i);
for (int n = 1; n < 5; n++) {
JSONArray lesson = day.getJSONArray(""+n);
ClassInfos = new ArrayList<>();
for(int m = 0; m < lesson.length();m++) {
JSONObject des = (JSONObject) lesson.get(m);
String name = des.getString("course");
String teacher = des.getString("teacher");
String time = des.getString("time");
String room = des.getString("classroom");
/*showToast("星期:" + i + "\n节次:" + n + "\n课程名字:"
+ name + "\n任课老师:" + teacher + "\n上课周数:" + time
+ "\n教室:" + room);*/
ClassInfo = new HashMap<>();
ClassInfo.put("Name","课程名字:" + name);
ClassInfo.put("Teacher","上课老师:" + teacher);
ClassInfo.put("Time","上课周次:" + time);
ClassInfo.put("Room","上课教室:" + room);
ClassInfos.add(ClassInfo);
}
}
}
}catch (JSONException e) {
e.printStackTrace();
}
}
private void showToast(final String message) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(ScheduleActivity.this,message, Toast.LENGTH_SHORT).show();
}
});
}
private void reLogin() {
InfoUtil.deleteUserInfo(ScheduleActivity.this);
runOnUiThread(new Runnable() {
@Override
public void run() {
final Intent intent = getPackageManager().
getLaunchIntentForPackage(getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Toast.makeText(ScheduleActivity.this,
"数据异常,请重新登录帐号",Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onTabSelected(MaterialTab tab) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(MaterialTab tab) {
}
@Override
public void onTabUnselected(MaterialTab tab) {
}
private class ViewPagerAdapter extends FragmentStatePagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
public Fragment getItem(int num) {
return new LessonFragment();
}
@Override
public int getCount() {
return 7;
}
@Override
public CharSequence getPageTitle(int position) {
int temp = position+1;
return "星期" + temp;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.main, menu);
menu.add(0, 1, 0, R.string.home_about);
return true;
}
/**
* 用于界面返回按钮
* @param item
* @return
*/
@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.
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
break;
case 1:
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
Here is fragment : 这是片段:
package space.levan.myclass.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* Created by 339 on 2016/5/5.
*/
public class LessonFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
TextView text = new TextView(container.getContext());
text.setText("(╯°Д°)╯︵┴┴");
text.setGravity(Gravity.CENTER);
return text;
}
}
You just need to add a ListView in the LessonFragment. 您只需要在LessonFragment中添加一个ListView。
Follow these steps: 跟着这些步骤:
Create a layout file with a listview. 创建具有列表视图的布局文件。
Inflate this layout in onCreateView method of LessonFragment and find this listview. 在LessonFragment的onCreateView方法中膨胀此布局,然后找到此listview。
now, set an adapter for this listview, with the data you want.(hoping you know how to set an adapter) 现在,为此列表视图设置一个适配器,并提供所需的数据。(希望您知道如何设置适配器)
And now you have a listview in each tab. 现在,每个选项卡中都有一个列表视图。
public class LessonFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View rootView = inflater.inflate( R.layout.fragment_lesson, container, false); mListView = (ListView) rootView.findViewById(R.id.listview); //create an adapter //set the above adapter to the listview return rootView; } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.