简体   繁体   English

如何使用ViewPager + Fragment + ListView

[英]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: 跟着这些步骤:

  1. Create a layout file with a listview. 创建具有列表视图的布局文件。

  2. Inflate this layout in onCreateView method of LessonFragment and find this listview. 在LessonFragment的onCreateView方法中膨胀此布局,然后找到此listview。

  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM