Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每次我在android中单击选项卡时,都会以片段形式重新加载数据_Android_Android Fragments - Fatal编程技术网

每次我在android中单击选项卡时,都会以片段形式重新加载数据

每次我在android中单击选项卡时,都会以片段形式重新加载数据,android,android-fragments,Android,Android Fragments,我已经创建了一个应用程序的布局有三个标签在安卓2.3。每个选项卡都有一个片段,每个片段中都有一个列表视图。列表视图中显示的所有数据都来自互联网,数据总是会发生变化,所以每次我看到那个片段时,我都想重新加载数据。例如,我现在正在观看“tab1”,当我单击“tab2”时,“tab2”中的数据将重新加载,“tab1”中的数据也将重新加载。我试过了 ft.detach(frg); 固定支架(frg); ft.commit() 但总有错误 这是我的密码 main活动 public class MainAc

我已经创建了一个应用程序的布局有三个标签在安卓2.3。每个选项卡都有一个片段,每个片段中都有一个列表视图。列表视图中显示的所有数据都来自互联网,数据总是会发生变化,所以每次我看到那个片段时,我都想重新加载数据。例如,我现在正在观看“tab1”,当我单击“tab2”时,“tab2”中的数据将重新加载,“tab1”中的数据也将重新加载。我试过了

ft.detach(frg);
固定支架(frg);
ft.commit()

但总有错误

这是我的密码

main活动

public class MainActivity extends ActionBarActivity {

    private ViewPager pager;
    private TabsAdapter mTabsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pager = new ViewPager(this);
        pager.setId(R.id.pager);
        setContentView(pager);

        final ActionBar bar = getSupportActionBar();  
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mTabsAdapter = new TabsAdapter(this, getSupportActionBar(), pager);
        mTabsAdapter.addTab(bar.newTab().setText("tab1"), Tab1.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("tab2"), Tab2.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("tab3"), Tab3.class, null);
    }
}
public class Tab1 extends ListFragment{
    private String result;
    protected ArrayAdapter listAdapter;
    private ArrayList<String> items = new ArrayList<String>();
    final String uri = "http://localhost/sample.php";

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View rootView = inflater.inflate(R.layout.list, container, false);
        items.clear();
        Thread t = new Thread(new sendPostRunnable());
        t.start();
        listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items);
        setListAdapter(listAdapter);
        return rootView;
    }

    class sendPostRunnable implements Runnable{
        @Override
        public void run(){
            result = sendPostDataToInternet();
            String temp = "Not result.";
            try {
                JSONTokener jsonTokener = new JSONTokener(result); 
                JSONObject jsonObject = (JSONObject) jsonTokener.nextValue(); 
                JSONArray jarray = jsonObject.getJSONArray("response");
                for (int i = 0; i < jarray.length(); i++) { 
                    temp = "";
                    JSONObject jobject = jarray.getJSONObject(i); 
                    temp += "Name: "+jobject.getString("name")+"\n"; 
                    temp += "Email: "+jobject.getString("email"); 
                    items.add(temp);
                    temp = "";
                } 
                if(jarray.length() < 1){
                    items.add(temp);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            getActivity().runOnUiThread(new Runnable() {
                public void run() {
                    listAdapter.notifyDataSetChanged();
                }
            });

        }
    }

    private String sendPostDataToInternet(){
        HttpPost httpRequest = new HttpPost(uri);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        try{
            httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
            if (httpResponse.getStatusLine().getStatusCode() == 200){
                String strResult = EntityUtils.toString(httpResponse.getEntity());
                return strResult;
            }
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
public class TabsAdapter extends FragmentPagerAdapter implements TabListener, OnPageChangeListener{
    private final Context mContext;
    private final ActionBar mActionBar;
    private final ViewPager mViewPager;
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
    private final String TAG = "";

    static final class TabInfo{
        private final Class<?> clss;
        private final Bundle args;

        TabInfo(Class<?> _class, Bundle _args){
            clss = _class;
            args = _args;
        }
    }

    public TabsAdapter(FragmentActivity activity, ActionBar bar, ViewPager pager) {
        super(activity.getSupportFragmentManager());
        mContext = activity;
        mActionBar = bar;
        mViewPager = pager;
        mViewPager.setAdapter(this);
        mViewPager.setOnPageChangeListener(this);

    }

    public void addTab(Tab tab, Class<?> clss, Bundle args){
        TabInfo info = new TabInfo(clss, args);
        tab.setTag(info);
        tab.setTabListener(this);
        mTabs.add(info);
        mActionBar.addTab(tab);
        notifyDataSetChanged();
    }

    @Override
    public void onPageSelected(int position) {
        mActionBar.setSelectedNavigationItem(position); 
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        mViewPager.setCurrentItem(tab.getPosition());
        Log.v(TAG, "clicked");
        Object tag = tab.getTag();
        for (int i = 0; i<mTabs.size(); i++){
            if (mTabs.get(i) == tag){
                mViewPager.setCurrentItem(i);
            }
        }
    }

    @Override
    public Fragment getItem(int position) {
        TabInfo info = mTabs.get(position);
        return Fragment.instantiate(mContext, info.clss.getName(), info.args);
    }

    @Override
    public int getCount() {
        return mTabs.size();
    }
}
Tab1

public class MainActivity extends ActionBarActivity {

    private ViewPager pager;
    private TabsAdapter mTabsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pager = new ViewPager(this);
        pager.setId(R.id.pager);
        setContentView(pager);

        final ActionBar bar = getSupportActionBar();  
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mTabsAdapter = new TabsAdapter(this, getSupportActionBar(), pager);
        mTabsAdapter.addTab(bar.newTab().setText("tab1"), Tab1.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("tab2"), Tab2.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("tab3"), Tab3.class, null);
    }
}
public class Tab1 extends ListFragment{
    private String result;
    protected ArrayAdapter listAdapter;
    private ArrayList<String> items = new ArrayList<String>();
    final String uri = "http://localhost/sample.php";

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View rootView = inflater.inflate(R.layout.list, container, false);
        items.clear();
        Thread t = new Thread(new sendPostRunnable());
        t.start();
        listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items);
        setListAdapter(listAdapter);
        return rootView;
    }

    class sendPostRunnable implements Runnable{
        @Override
        public void run(){
            result = sendPostDataToInternet();
            String temp = "Not result.";
            try {
                JSONTokener jsonTokener = new JSONTokener(result); 
                JSONObject jsonObject = (JSONObject) jsonTokener.nextValue(); 
                JSONArray jarray = jsonObject.getJSONArray("response");
                for (int i = 0; i < jarray.length(); i++) { 
                    temp = "";
                    JSONObject jobject = jarray.getJSONObject(i); 
                    temp += "Name: "+jobject.getString("name")+"\n"; 
                    temp += "Email: "+jobject.getString("email"); 
                    items.add(temp);
                    temp = "";
                } 
                if(jarray.length() < 1){
                    items.add(temp);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            getActivity().runOnUiThread(new Runnable() {
                public void run() {
                    listAdapter.notifyDataSetChanged();
                }
            });

        }
    }

    private String sendPostDataToInternet(){
        HttpPost httpRequest = new HttpPost(uri);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        try{
            httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
            if (httpResponse.getStatusLine().getStatusCode() == 200){
                String strResult = EntityUtils.toString(httpResponse.getEntity());
                return strResult;
            }
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
public class TabsAdapter extends FragmentPagerAdapter implements TabListener, OnPageChangeListener{
    private final Context mContext;
    private final ActionBar mActionBar;
    private final ViewPager mViewPager;
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
    private final String TAG = "";

    static final class TabInfo{
        private final Class<?> clss;
        private final Bundle args;

        TabInfo(Class<?> _class, Bundle _args){
            clss = _class;
            args = _args;
        }
    }

    public TabsAdapter(FragmentActivity activity, ActionBar bar, ViewPager pager) {
        super(activity.getSupportFragmentManager());
        mContext = activity;
        mActionBar = bar;
        mViewPager = pager;
        mViewPager.setAdapter(this);
        mViewPager.setOnPageChangeListener(this);

    }

    public void addTab(Tab tab, Class<?> clss, Bundle args){
        TabInfo info = new TabInfo(clss, args);
        tab.setTag(info);
        tab.setTabListener(this);
        mTabs.add(info);
        mActionBar.addTab(tab);
        notifyDataSetChanged();
    }

    @Override
    public void onPageSelected(int position) {
        mActionBar.setSelectedNavigationItem(position); 
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        mViewPager.setCurrentItem(tab.getPosition());
        Log.v(TAG, "clicked");
        Object tag = tab.getTag();
        for (int i = 0; i<mTabs.size(); i++){
            if (mTabs.get(i) == tag){
                mViewPager.setCurrentItem(i);
            }
        }
    }

    @Override
    public Fragment getItem(int position) {
        TabInfo info = mTabs.get(position);
        return Fragment.instantiate(mContext, info.clss.getName(), info.args);
    }

    @Override
    public int getCount() {
        return mTabs.size();
    }
}
public类Tab1扩展了ListFragment{
私有字符串结果;
受保护的阵列适配器列表适配器;
private ArrayList items=new ArrayList();
最终字符串uri=”http://localhost/sample.php";
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.list,容器,false);
items.clear();
线程t=新线程(new sendPostRunnable());
t、 start();
listAdapter=new ArrayAdapter(getActivity(),android.R.layout.simple\u list\u item\u 1,items);
setListAdapter(listAdapter);
返回rootView;
}
类sendPostRunnable实现Runnable{
@凌驾
公开募捐{
结果=sendPostDataToInternet();
字符串temp=“非结果。”;
试一试{
JSONTokener JSONTokener=新的JSONTokener(结果);
JSONObject JSONObject=(JSONObject)jsonTokener.nextValue();
JSONArray jarray=jsonObject.getJSONArray(“响应”);
对于(inti=0;i
TabsAdapter

public class MainActivity extends ActionBarActivity {

    private ViewPager pager;
    private TabsAdapter mTabsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pager = new ViewPager(this);
        pager.setId(R.id.pager);
        setContentView(pager);

        final ActionBar bar = getSupportActionBar();  
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mTabsAdapter = new TabsAdapter(this, getSupportActionBar(), pager);
        mTabsAdapter.addTab(bar.newTab().setText("tab1"), Tab1.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("tab2"), Tab2.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("tab3"), Tab3.class, null);
    }
}
public class Tab1 extends ListFragment{
    private String result;
    protected ArrayAdapter listAdapter;
    private ArrayList<String> items = new ArrayList<String>();
    final String uri = "http://localhost/sample.php";

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View rootView = inflater.inflate(R.layout.list, container, false);
        items.clear();
        Thread t = new Thread(new sendPostRunnable());
        t.start();
        listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items);
        setListAdapter(listAdapter);
        return rootView;
    }

    class sendPostRunnable implements Runnable{
        @Override
        public void run(){
            result = sendPostDataToInternet();
            String temp = "Not result.";
            try {
                JSONTokener jsonTokener = new JSONTokener(result); 
                JSONObject jsonObject = (JSONObject) jsonTokener.nextValue(); 
                JSONArray jarray = jsonObject.getJSONArray("response");
                for (int i = 0; i < jarray.length(); i++) { 
                    temp = "";
                    JSONObject jobject = jarray.getJSONObject(i); 
                    temp += "Name: "+jobject.getString("name")+"\n"; 
                    temp += "Email: "+jobject.getString("email"); 
                    items.add(temp);
                    temp = "";
                } 
                if(jarray.length() < 1){
                    items.add(temp);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            getActivity().runOnUiThread(new Runnable() {
                public void run() {
                    listAdapter.notifyDataSetChanged();
                }
            });

        }
    }

    private String sendPostDataToInternet(){
        HttpPost httpRequest = new HttpPost(uri);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        try{
            httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
            if (httpResponse.getStatusLine().getStatusCode() == 200){
                String strResult = EntityUtils.toString(httpResponse.getEntity());
                return strResult;
            }
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
public class TabsAdapter extends FragmentPagerAdapter implements TabListener, OnPageChangeListener{
    private final Context mContext;
    private final ActionBar mActionBar;
    private final ViewPager mViewPager;
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
    private final String TAG = "";

    static final class TabInfo{
        private final Class<?> clss;
        private final Bundle args;

        TabInfo(Class<?> _class, Bundle _args){
            clss = _class;
            args = _args;
        }
    }

    public TabsAdapter(FragmentActivity activity, ActionBar bar, ViewPager pager) {
        super(activity.getSupportFragmentManager());
        mContext = activity;
        mActionBar = bar;
        mViewPager = pager;
        mViewPager.setAdapter(this);
        mViewPager.setOnPageChangeListener(this);

    }

    public void addTab(Tab tab, Class<?> clss, Bundle args){
        TabInfo info = new TabInfo(clss, args);
        tab.setTag(info);
        tab.setTabListener(this);
        mTabs.add(info);
        mActionBar.addTab(tab);
        notifyDataSetChanged();
    }

    @Override
    public void onPageSelected(int position) {
        mActionBar.setSelectedNavigationItem(position); 
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        mViewPager.setCurrentItem(tab.getPosition());
        Log.v(TAG, "clicked");
        Object tag = tab.getTag();
        for (int i = 0; i<mTabs.size(); i++){
            if (mTabs.get(i) == tag){
                mViewPager.setCurrentItem(i);
            }
        }
    }

    @Override
    public Fragment getItem(int position) {
        TabInfo info = mTabs.get(position);
        return Fragment.instantiate(mContext, info.clss.getName(), info.args);
    }

    @Override
    public int getCount() {
        return mTabs.size();
    }
}
公共类TabsAdapter扩展了FragmentPagerAdapter,实现了TabListener、OnPageChangeListener{
私有最终上下文mContext;
私人终审法院;
专用最终查看页面mViewPager;
private final ArrayList mtab=new ArrayList();
私有最终字符串标记=”;
静态最终类TabInfo{
私人期末班;
私有最终包args;
TabInfo(类_类,捆绑参数){
clss=_类;
args=_args;
}
}
公共选项卡dapter(片段活动、操作栏、ViewPager寻呼机){
super(activity.getSupportFragmentManager());
mContext=活动;
mActionBar=bar;
mViewPager=寻呼机;
mViewPager.setAdapter(此);
mViewPager.setOnPageChangeListener(此);
}
public void addTab(选项卡、类cls、Bundle args){
TabInfo=新的TabInfo(clss,args);
tab.setTag(信息);
tab.setTableListener(此);
添加(信息);
mActionBar.addTab(tab);
notifyDataSetChanged();
}
@凌驾
已选择页面上的公共无效(内部位置){
mActionBar.setSelectedNavigationItem(位置);
}
@凌驾
已选择的公共事务(选项卡,碎片事务ft){
setCurrentItem(tab.getPosition());
Log.v(标记“点击”);
Object tag=tab.getTag();

对于(int i=0;i在片段中推进一些接口,如
onmyrefreshlister
,然后:

public void onPageSelected(int position) { 
    ((OnMyRefreshListener)pagerViewAdapter.getItem()).onMyRefresh();
}

我在以前的应用程序中遇到了同样的问题

无需更多更改,只需在MainActivity.java中添加一行即可

public class MainActivity extends ActionBarActivity {

    private ViewPager pager;
    private TabsAdapter mTabsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pager = new ViewPager(this);
        pager.setId(R.id.pager);
        setContentView(pager);

        final ActionBar bar = getSupportActionBar();  
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mTabsAdapter = new TabsAdapter(this, getSupportActionBar(), pager);
        mTabsAdapter.addTab(bar.newTab().setText("tab1"), Tab1.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("tab2"), Tab2.class, null);
        mTabsAdapter.addTab(bar.newTab().setText("tab3"), Tab3.class, null);
    }
}
public class Tab1 extends ListFragment{
    private String result;
    protected ArrayAdapter listAdapter;
    private ArrayList<String> items = new ArrayList<String>();
    final String uri = "http://localhost/sample.php";

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View rootView = inflater.inflate(R.layout.list, container, false);
        items.clear();
        Thread t = new Thread(new sendPostRunnable());
        t.start();
        listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items);
        setListAdapter(listAdapter);
        return rootView;
    }

    class sendPostRunnable implements Runnable{
        @Override
        public void run(){
            result = sendPostDataToInternet();
            String temp = "Not result.";
            try {
                JSONTokener jsonTokener = new JSONTokener(result); 
                JSONObject jsonObject = (JSONObject) jsonTokener.nextValue(); 
                JSONArray jarray = jsonObject.getJSONArray("response");
                for (int i = 0; i < jarray.length(); i++) { 
                    temp = "";
                    JSONObject jobject = jarray.getJSONObject(i); 
                    temp += "Name: "+jobject.getString("name")+"\n"; 
                    temp += "Email: "+jobject.getString("email"); 
                    items.add(temp);
                    temp = "";
                } 
                if(jarray.length() < 1){
                    items.add(temp);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            getActivity().runOnUiThread(new Runnable() {
                public void run() {
                    listAdapter.notifyDataSetChanged();
                }
            });

        }
    }

    private String sendPostDataToInternet(){
        HttpPost httpRequest = new HttpPost(uri);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        try{
            httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
            if (httpResponse.getStatusLine().getStatusCode() == 200){
                String strResult = EntityUtils.toString(httpResponse.getEntity());
                return strResult;
            }
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
public class TabsAdapter extends FragmentPagerAdapter implements TabListener, OnPageChangeListener{
    private final Context mContext;
    private final ActionBar mActionBar;
    private final ViewPager mViewPager;
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
    private final String TAG = "";

    static final class TabInfo{
        private final Class<?> clss;
        private final Bundle args;

        TabInfo(Class<?> _class, Bundle _args){
            clss = _class;
            args = _args;
        }
    }

    public TabsAdapter(FragmentActivity activity, ActionBar bar, ViewPager pager) {
        super(activity.getSupportFragmentManager());
        mContext = activity;
        mActionBar = bar;
        mViewPager = pager;
        mViewPager.setAdapter(this);
        mViewPager.setOnPageChangeListener(this);

    }

    public void addTab(Tab tab, Class<?> clss, Bundle args){
        TabInfo info = new TabInfo(clss, args);
        tab.setTag(info);
        tab.setTabListener(this);
        mTabs.add(info);
        mActionBar.addTab(tab);
        notifyDataSetChanged();
    }

    @Override
    public void onPageSelected(int position) {
        mActionBar.setSelectedNavigationItem(position); 
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        mViewPager.setCurrentItem(tab.getPosition());
        Log.v(TAG, "clicked");
        Object tag = tab.getTag();
        for (int i = 0; i<mTabs.size(); i++){
            if (mTabs.get(i) == tag){
                mViewPager.setCurrentItem(i);
            }
        }
    }

    @Override
    public Fragment getItem(int position) {
        TabInfo info = mTabs.get(position);
        return Fragment.instantiate(mContext, info.clss.getName(), info.args);
    }

    @Override
    public int getCount() {
        return mTabs.size();
    }
}
viewPager.setOffscreenPageLimit();

如果有三个选项卡,则将viewPager.setOffscreenPageLimit(3)