片段之间notifydatasetchange不工作? [英] notifydatasetchange doesnt work between fragments?

查看:158
本文介绍了片段之间notifydatasetchange不工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个疑问,我有两个片段,即一个的frag和片段的B同样的活动需要从B到A传递数据。从B数据需要填充的ListView动态我试图notifydatasetchange(),但它仍然没有到目前为止,我已经尝试的工作。

片段B:

 包first.service precision.servicefirst。/ **
 *创建于4264的23-11-2015。
 * /
进口android.app.Fragment;
进口android.app.FragmentManager;
进口android.app.FragmentTransaction;
进口android.os.Bundle;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ArrayAdapter;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.Spinner;公共类NewRequirements扩展片段{
    添加添加;
    customListAdapterldrequirements customListAdapterldrequirements;    //公共静态的newInstance NewRequirements(束束){    //添加myFragment =新的Add();
    // myFragment.setArguments(包);
    //}    //}    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                             捆绑savedInstanceState){
        // TODO自动生成方法存根        查看查看= inflater.inflate(R.layout.fragment_dialog_claim,集装箱,
                假);
        最终按钮btnupdate;
        btnupdate =(按钮)view.findViewById(R.id.update);
        最后的微调SBU =(微调)view.findViewById(R.id.sbuu);
        最终的EditText requiremtns =(EditText上)view.findViewById(R.id.txtEmployee code);
        最后ArrayAdapter<&CharSequence的GT; adaptersbu = ArrayAdapter.createFromResource(
                。getActivity()getBaseContext(),R.array.newrequirements,R.layout.spinnerlayout);
        adaptersbu.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sbu.setAdapter(adaptersbu);
        最后的微调BU =(微调)view.findViewById(R.id.bu);
        最后ArrayAdapter<&CharSequence的GT; adapterbu = ArrayAdapter.createFromResource(getActivity()getBaseContext(),R.array.newrequirements,R.layout.spinnerlayout);
        adapterbu.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        bu.setAdapter(adapterbu);
        最后的微调SBUU =(微调)view.findViewById(R.id.sbu);
        最后ArrayAdapter<&CharSequence的GT; adaptersbuu = ArrayAdapter.createFromResource(getActivity()getBaseContext(),R.array.newrequirements,R.layout.spinnerlayout);
        adaptersbuu.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sbuu.setAdapter(adaptersbuu);
        最后的微调SC =(微调)view.findViewById(R.id.sc);
        ArrayAdapter<&CharSequence的GT; adaptersc = ArrayAdapter.createFromResource(getActivity()getBaseContext(),R.array.newrequirements,R.layout.spinnerlayout);
        adaptersc.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sc.setAdapter(adaptersc);
        最后的微调SSC =(微调)view.findViewById(R.id.ssc);
        ArrayAdapter<&CharSequence的GT; adapterssc = ArrayAdapter.createFromResource
                (getActivity()getBaseContext(),R.array.newrequirements,R.layout.spinnerlayout);
        adapterssc.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        ssc.setAdapter(adapterssc);
        setHasOptionsMenu(真);
添加附加=(添加)getFragmentManager()findFragmentByTag(信息)。
        add.updateListView();        btnupdate.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){                。字符串str = sbu.getSelectedItem()的toString();
       。字符串business_unit = bu.getSelectedItem()的toString();
                。字符串sub_business_unit = sbuu.getSelectedItem()的toString();
。字符串服务= sc.getSelectedItem()的toString();
                。字符串servicec = ssc.getSelectedItem()的toString();                。字符串REQ = requiremtns.getText()的toString();
                FragmentManager FM = getFragmentManager();
                添加附加=新的Add();                // bundle.putString(是,STR);
                // Log.i(捆绑,bundle.toString());
                // Log.v(添加,STR);
                // add.setArguments(包);
                Main2Activity.sbu =海峡;
                Main2Activity.bu = business_unit;
                Main2Activity.sbuu = sub_business_unit;
                Main2Activity.sc =服务;
                Main2Activity.ssc = servicec;
                Main2Activity.req = REQ;
                FragmentTransaction英尺= fm.beginTransaction();
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.replace(R.id.content_frame,添加HI);                //add.lv.setVisibility(View.VISIBLE);
                ft.addToBackStack(NULL);
                ft.commit();
            }        });
        返回视图。
    }}

片段:

 包first.service precision.servicefirst。/ **
 *创建于4264的23-11-2015。
 * /
进口android.app.Fragment;
进口android.app.FragmentManager;
进口android.app.FragmentTransaction;
进口android.os.Bundle;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.AdapterView;
进口android.widget.ArrayAdapter;
进口android.widget.Button;
进口android.widget.ListView;
进口android.widget.Spinner;
进口android.widget.TextView;进口的java.util.ArrayList;/ **
 *创建于4264的16-10-2015。
 * /
公共类添加扩展片段实现View.OnClickListener
{
    私人的ListView LV;
 静态字符串SBU,SBUU,SC,SSC,REQ;
    静态字符串蒲式耳;
    静态布尔单;
    添加添加;    customListAdapterldrequirements CUS;
    私人的ArrayList< LdNewsItem> ldnews;    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                             捆绑savedInstanceState){
        尝试{
            查看rootView = inflater.inflate(R.layout.activity_btn_add,集装箱,FALSE);
            微调ldsource =(微调)rootView.findViewById(R.id.lead_source);
            ArrayAdapter<&CharSequence的GT;适配器= ArrayAdapter.createFromResource(
                    。getActivity()getBaseContext(),R.array.dropbox1,R.layout.spinnerlayout);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            ldsource.setAdapter(适配器);
            // EDITTEXT的EditText =(EditText上)rootView.findViewById(R.id.title);            微调ldtype =(微调)rootView.findViewById(R.id.ldtype);
            ArrayAdapter<&CharSequence的GT;适配器1 = ArrayAdapter.createFromResource(
                    。getActivity()getBaseContext(),R.array.dropbox2,R.layout.spinnerlayout);            adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            ldtype.setAdapter(适配器1);
            微调ldstatus =(微调)rootView.findViewById(R.id.ldstatus);
            TextView的TXT =(TextView中)rootView.findViewById(R.id.spinnerTarget);
            ArrayAdapter<&CharSequence的GT;适配器2 = ArrayAdapter.createFromResource(
                    。getActivity()getBaseContext(),R.array.dropbox3,R.layout.spinnerlayout);            adapter2.setDropDownViewResource(android.R.layout.simple_selectable_list_item);
            ldstatus.setAdapter(适配器2);
            //捆绑包= getArguments();
            //串好= bundle.getString(SBU);
            捆绑包= getArguments();// SBU = getArguments()的getString(是)。
            //公共布尔onTouch(视图V,MotionEvent事件){
            //返回false;
            //}            //通过触摸监听器设置用于处理内部滚动型触摸
            //});            LV =(ListView控件)rootView.findViewById(R.id.ldrequirements);
// customListAdapterldrequirements customListAdapterldrequirements =新customListAdapterldrequirements(getActivity(),listContact);            ArrayList的< LdNewsItem> listContact = GetlistContact();
            lv.setAdapter(新customListAdapterldrequirements(getActivity(),listContact));
customListAdapterldrequirements customListAdapterldrequirements =新customListAdapterldrequirements(getActivity(),listContact);            // CUS =新customListAdapterldrequirements(这一点,ldnews);
            lv.setOnItemClickListener(新AdapterView.OnItemClickListener(){
                @覆盖
                公共无效onItemClick(适配器视图<>母公司,观景,INT位置,
                                        长ID){                    如果(单){
                        NewRequirements newRequirements =新NewRequirements();
                        FragmentManager FM = getFragmentManager();
                        FragmentTransaction英尺= fm.beginTransaction();
                        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);                        // lv.deferNotifyDataSetChanged();
                        ft.replace(R.id.content_frame,newRequirements,HI);
                        ft.addToBackStack(NULL);
                        ft.commit();                    }其他{                        lv.getItemIdAtPosition(位置);
                    }
                }
            });
      / * lv.setOnTouchListener(新View.OnTouchListener(){
            @覆盖
            公共布尔onTouch(视图V,MotionEvent事件){
                返回false;
            }
            //通过触摸监听器设置用于处理内部滚动型触摸
      // @覆盖
        //公共布尔onTouch(视图V,MotionEvent事件){
                //禁止对儿童鉴于触摸父滚动触摸请求          // v.getParent()requestDisallowInterceptTouchEvent(真);
//
  //返回false;
    //}
        }); * /
            返回rootView;        }赶上(例外五){
            Ë扔掉;
        }
    }
    私人的ArrayList< LdNewsItem> GetlistContact()
    {
        ArrayList的< LdNewsItem> contactlist =新的ArrayList< LdNewsItem>();
        //字符串str = getArguments()的getString(是)。
        //字符串str =测试;
        // NewRequirements newr =新NewRequirements();
//字符串瑜珈= getArguments()的getString(SBU);
// sbu.notify();
        SBU = Main2Activity.sbu;
        BU = Main2Activity.bu;
        SBUU = Main2Activity.sbuu;
        SC = Main2Activity.sc;
        SSC = Main2Activity.ssc;
        REQ = Main2Activity.req;
        的for(int i = 1; I< = 5;我++){
            LdNewsItem接触=新LdNewsItem();
            contact.setSbu(SBU);
            contact.setBu(BU);
            contact.setSbuu(SBUU);
            contact.setSc(SC);
            contact.setSsc(SSC);
            contact.setReq(REQ);
            // contact.setReporterName(不管你的房子有多大,你的车是如何新,或您的银行帐户有多大 - 我们的坟墓将永远是相同的大小保持谦虚。+ I);
            contactlist.add(接触);
//lv.setAdapter((ListAdapter)contactlist);        }        返回contactlist;
    }    @覆盖
    公共无效onActivityCreated(捆绑savedInstanceState){
        super.onActivityCreated(savedInstanceState);        片段片段= NULL;
        setHasOptionsMenu(真);
        按钮btnrequirements =(按钮)getActivity()findViewById(R.id.btnrequirements)。
        btnrequirements.setOnClickListener(本);
        。按钮btnactnt =(按钮)getActivity()findViewById(R.id.btnacnt);
        btnactnt.setOnClickListener(本);
        。按钮btnprimary =(按钮)getActivity()findViewById(R.id.btnprimary);
        btnprimary.setOnClickListener(本);
        。按钮btnsecondary =(按钮)getActivity()findViewById(R.id.btnsecondary);
        btnsecondary.setOnClickListener(本);
    }    @覆盖
    公共无效的onClick(视图v){
        开关(v.getId()){
            案例R.id.btnrequirements:
                片段newFragment =新NewRequirements();
                //考虑使用Java编码约定(上部第一个字符类的名字!)
                FragmentTransaction交易= getFragmentManager()调用BeginTransaction()。
                //替换无论是在fragment_container认为这个片段,
                //和事务添加到后退堆栈
                transaction.replace(R.id.content_frame,newFragment);
                transaction.addToBackStack(NULL);
                //提交事务
                器transaction.commit();
                打破;            案例R.id.btnacnt:
                FragmentManager FM = getFragmentManager();
                // FragmentTransaction英尺= fm.beginTransaction();
                SelectAccountDialog selectAccountDialog =新SelectAccountDialog();
                selectAccountDialog.setRetainInstance(真);
                selectAccountDialog.show(FM,fragment_name);                //ft.addToBackStack(null);                打破;
            案例R.id.btnprimary:
                FragmentManager FMM = getFragmentManager();
                // FragmentTransaction FTT = fmm.beginTransaction();
                SelectAccountDialog selectAccountDialog1 =新SelectAccountDialog();
                selectAccountDialog1.setRetainInstance(真);
                selectAccountDialog1.show(FMMfragment_name);
                // ftt.addToBackStack(NULL);
                打破;
            案例R.id.btnsecondary:
                FragmentManager FM2 = getFragmentManager();
                // FragmentTransaction fttt = fm2.beginTransaction();
                SelectAccountDialog selectAccountDialog2 =新SelectAccountDialog();
                selectAccountDialog2.setRetainInstance(真);
                selectAccountDialog2.show(FM2,fragment_name);
                // fttt.addToBackStack(NULL);
                打破;        }    }
    公共无效updateListView(){
   cus.notifyDataSetChanged();
    }
}

这是我的customlistadapter:

 包first.service precision.servicefirst。/ **
 *创建于4264的23-11-2015。
 * /
进口android.content.Context;
进口android.graphics.Color;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.BaseAdapter;
进口android.widget.TextView;进口的java.util.ArrayList;/ **
 *创建于4264的2015年12月11日。
 * /
公共类customListAdapterldrequirements延伸BaseAdapter {    添加添加;
    私人的ArrayList< LdNewsItem>的ListData;
    私人LayoutInflater layoutInflater;    公共customListAdapterldrequirements(上下文的背景下,ArrayList的< LdNewsItem>的ListData){
        this.listData =的ListData;
        layoutInflater = LayoutInflater.from(上下文);
    }    @覆盖
    公众诠释的getCount(){        返回listData.size();
    }    @覆盖
    公共对象的getItem(INT位置){        返回listData.get(位置);
    }
    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        ViewHolder持有人;        查看MVIEW = convertView;        // convertView.setBackgroundColor(Color.parseColor(#E5E5E5));        如果(convertView == NULL){
            convertView = layoutInflater.inflate(R.layout.list_ld_requirements,NULL);            持有人=新ViewHolder();
            holder.headlineView =(TextView中)convertView.findViewById(R.id.sbu);
            holder.reporterNameView =(TextView中)convertView.findViewById(R.id.bu);
            holder.reportedDateView =(TextView中)convertView.findViewById(R.id.sbuu);
            holder.ldstatusView =(TextView中)convertView.findViewById(R.id.sc);
            holder.ldtype =(TextView中)convertView.findViewById(R.id.ssc);
            holder.ldsource =(TextView中)convertView.findViewById(R.id.rq);
        // add.lv.setVisibility(View.INVISIBLE);
            convertView.setTag(保持器);        }其他{
            支架=(ViewHolder)convertView.getTag();
        }
    // add.lv.setVisibility(View.VISIBLE);
        holder.headlineView.setText(战略业务部:+ listData.get(位置).getSbu());
        holder.reportedDateView.setText(业务部+ listData.get(位置).getSbuu());
        holder.ldstatusView.setText(子业务部:+ listData.get(位置).getSc());
        holder.ldtype.setText(服务类别:+ listData.get(位置).getSsc());
        holder.ldsource.setText(服务子类别:+ listData.get(位置).getReq());
        convertView.setBackgroundColor(Color.parseColor(#E5E5E5));        // holder.headlineView.setText(要求:+ listData.get(位置).getReq());
        返回convertView;
    }    静态类ViewHolder {
        公众的TextView headlineView;
        公众的TextView reporterNameView;
        公众的TextView reportedDateView;
        公众的TextView ldstatusView;
        公众的TextView ldtype;
        公众的TextView ldsource;
        公众的TextView REQ;
    }
}

我的主要活动:

 包first.service precision.servicefirst。进口android.annotation.Sup pressLint;
进口android.app.ActionBar;
进口android.app.Activity;
进口android.app.Fragment;
进口android.app.FragmentManager;
进口android.app.FragmentTransaction;
进口android.graphics.Color;
进口android.graphics.drawable.ColorDrawable;
进口android.os.Bundle;
进口android.support.v4.widget.DrawerLayout;
进口android.support.v7.app.ActionBarDrawerToggle;
进口android.util.Log;
进口android.view.Gravity;
进口android.view.Menu;
进口android.view.MenuInflater;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.ArrayAdapter;
进口android.widget.Button;
进口android.widget.ListView;
公共类Main2Activity延伸活动{    公共静态字符串SBU,卜,SBUU,SC,SSC,REQ;    //在其全部活动是封闭
    私人DrawerLayout mDrawerLayout;    //重的ListView presents抽屉式导航栏
    私人的ListView mDrawerList;
    按钮butonlead;
    // ActionBarDrawerToggle表明抽屉式导航的操作栏中的presence
    私人ActionBarDrawerToggle mDrawerToggle;    //操作栏标题
    私人字符串mTitle =;
    @燮pressLint(NewApi)
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main2);        最后的动作条AB = getActionBar();
        ab.show();
        //获取参考DrawerLayout
        mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);
        ab.setTitle(mTitle);        mDrawerList =(ListView控件)findViewById(R.id.drawer_list);        //获取参考ActionBarDrawerToggle
        mDrawerToggle =新ActionBarDrawerToggle(这一点,mDrawerLayout,                R.string.open_drawer,
                R.string.close_drawer){            当抽屉被关闭调用/ ** * /
            公共无效onDrawerClosed(查看视图){                invalidateOptionsMenu();            }            / **抽屉被打开时调用* /
            公共无效onDrawerOpened(查看drawerView){                invalidateOptionsMenu();
            }
        };        //对DrawerLayout设置DrawerToggle
        mDrawerLayout.setDrawerListener(mDrawerToggle);        //创建一个ArrayAdapter将项目添加到列表视图mDrawerList
        ArrayAdapter<串GT;适配器=新ArrayAdapter<串GT;(getApplication()
                。R.layout.drawer_list_item,R.id.title,getResources()getStringArray(R.array.option));        //设置上mDrawerList适配器
        mDrawerList.setAdapter(适配器);        //启用主页按钮
        ab.setHomeButtonEnabled(真);
        ab.setBackgroundDrawable(新ColorDrawable(Color.parseColor(#53A93F)));
        //启用向上导航
        ab.show();
        ab.setDisplayHomeAsUpEnabled(真);        //设置项目点击监听器为ListView mDrawerList
        mDrawerList.setOnItemClickListener(新OnItemClickListener(){            @覆盖
            公共无效onItemClick(适配器视图<>母公司,观景,
                                    INT位置,长的id){                //获取一组选项
                的String []菜单项= getResources()getStringArray(R.array.option)。                //当前选定的选项
                mTitle =菜单项[位置]                片段片段= NULL;
                开关(位置){
                    情况下0:
                        片段=新的线索();
                        打破;
                    情况1:
                        片段=新机遇();
                        打破;
                    案例2:
                        片段=新帐户();
                        打破;
                    案例3:
                        片段=新Contactss();
                        打破;
                    情况4:
                        片段=新的文件();
                        打破;
                    情况5:
                        片段=新报告();
                    默认:
                        打破;
                }
                如果(片段!= NULL){
                    //获取参考FragmentManager
                    FragmentManager fragmentManager = getFragmentManager();
                    fragmentManager.beginTransaction()取代(R.id.content_frame,片段).addToBackStack(fragback)提交()。
                    //创建一个片段交易
                    FragmentTransaction英尺= fragmentManager.beginTransaction();                    //添加一个片段片段交易
                    ft.replace(R.id.content_frame,片段);                    //提交事务
                    ft.commit();                    //关闭抽屉
                    mDrawerLayout.closeDrawer(mDrawerList);
                }其他{
                    //错误创建片段
                    Log.e(MainActivity,出错创建片段);
                }            }
        });
    }    @覆盖
    公共无效onBack pressed(){
        如果(mDrawerLayout.isDrawerOpen(Gravity.LEFT)){
            mDrawerLayout.closeDrawer(mDrawerList);
        }其他{
            super.onBack pressed();
        }    }
    @覆盖
    保护无效onPostCreate(捆绑savedInstanceState){
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        如果(mDrawerToggle.onOptionsItemSelected(项目)){
            返回true;
        }
        返回super.onOptionsItemSelected(项目);
    }    / **
     *每当我们称之为invalidateOptionsMenu()调用
     * /
    @覆盖
    prepareOptionsMenu(菜单菜单)上公共布尔{
        //如果抽屉被打开,隐藏操作项相关内容视图
        布尔drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        返回super.on prepareOptionsMenu(菜单);
    }    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单){
        MenuInflater吹气= getMenuInflater();
        inflater.inflate(R.menu.main2,菜单);
        返回super.onCreateOptionsMenu(菜单);
    }   / * @覆盖
    公共无效DataTransfer(串E){
    } * /
//
    // @覆盖
    //公共无效DataTransfer(ArrayList的<串GT; e){
    //添加OBJ =(添加)getFragmentManager()findFragmentById(R.id.frag_1)。
    // obj.GetlistContact(E);
    //}
}
  / * @覆盖
    公共无效的SelectedValue(String s)将{
            添加附加=新的Add();
            FragmentManager FM = getFragmentManager();
            FragmentTransaction英尺= fm.beginTransaction();
            ft.replace(R.id.content_frame,补充);
            ft.commit();}
    }
* /

我希望你们来帮我们初学者和我们一样提前感谢!


解决方案

你可以通过使用片段标签从fragB更新从断枝B您的frag一个你可以这样调用,

 弗拉加F =(弗拉加)getSupportFragmentManager()findFragmentByTag(yourfragATag);
     //更新列表视图
     f.updateListView();

现在如何声明标记....


  

    

您可以在指定的时间标记名时,片段被连接到容器MainActivity


  

  ///这是你如何设置标签片段片段= NULL;
字符串标记=;
                开关(位置){
                    情况下0:
                        片段=新的线索();
                      标签=线索;
                        打破;
                    情况1:
                    标签=机遇
                        片段=新机遇();
                        打破;
                    案例2:
                     标签=帐户;
                        片段=新帐户();
                        打破;
                    案例3:
                        标签=Contactss;
                        片段=新Contactss();
                        打破;
                    情况4:
                        片段=新的文件();
                        打破;
                    情况5:
                        片段=新报告();
                    默认:
                        打破;
                }
                如果(片段!= NULL){
                    //获取参考FragmentManager
                    FragmentManager fragmentManager = getFragmentManager();
                    fragmentManager.beginTransaction()取代(R.id.content_frame,片段).addToBackStack(fragback)提交()。
                    //创建一个片段交易
                    FragmentTransaction英尺= fragmentManager.beginTransaction();                    //添加一个片段片段交易
                    ft.replace(R.id.content_frame,片段标签);                    //提交事务
                    ft.commit();                    //关闭抽屉
                    mDrawerLayout.closeDrawer(mDrawerList);
                }

:)

I have a doubt i have two fragments namely frag a and frag b of same activity need to pass data from b to a . data from b need to populate listview dynamically i tried notifydatasetchange() but still it doesn't work so far what i have tried is

fragment b:

   package first.service.precision.servicefirst;

/**
 * Created by 4264 on 23-11-2015.
 */
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;

public class NewRequirements extends Fragment {
    Add add;
    customListAdapterldrequirements customListAdapterldrequirements;

    //public static NewRequirements newInstance(Bundle bundle) {

    //     Add myFragment = new Add();
    //    myFragment.setArguments(bundle);
    //}

    // }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        View view = inflater.inflate(R.layout.fragment_dialog_claim, container,
                false);
        final Button btnupdate;
        btnupdate = (Button) view.findViewById(R.id.update);
        final Spinner sbu = (Spinner) view.findViewById(R.id.sbuu);
        final EditText requiremtns=(EditText)view.findViewById(R.id.txtEmployeeCode);
        final ArrayAdapter<CharSequence> adaptersbu = ArrayAdapter.createFromResource(
                getActivity().getBaseContext(), R.array.newrequirements, R.layout.spinnerlayout);
        adaptersbu.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sbu.setAdapter(adaptersbu);
        final Spinner bu = (Spinner) view.findViewById(R.id.bu);
        final ArrayAdapter<CharSequence> adapterbu = ArrayAdapter.createFromResource(getActivity().getBaseContext(), R.array.newrequirements, R.layout.spinnerlayout);
        adapterbu.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        bu.setAdapter(adapterbu);
        final Spinner sbuu = (Spinner) view.findViewById(R.id.sbu);
        final ArrayAdapter<CharSequence> adaptersbuu = ArrayAdapter.createFromResource(getActivity().getBaseContext(), R.array.newrequirements, R.layout.spinnerlayout);
        adaptersbuu.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sbuu.setAdapter(adaptersbuu);
        final Spinner sc = (Spinner) view.findViewById(R.id.sc);
        ArrayAdapter<CharSequence> adaptersc = ArrayAdapter.createFromResource(getActivity().getBaseContext(), R.array.newrequirements, R.layout.spinnerlayout);
        adaptersc.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sc.setAdapter(adaptersc);
        final Spinner ssc = (Spinner) view.findViewById(R.id.ssc);
        ArrayAdapter<CharSequence> adapterssc = ArrayAdapter.createFromResource
                (getActivity().getBaseContext(), R.array.newrequirements, R.layout.spinnerlayout);
        adapterssc.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        ssc.setAdapter(adapterssc);
        setHasOptionsMenu(true);
Add add=(Add)getFragmentManager().findFragmentByTag("leads");
        add.updateListView();

        btnupdate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String str = sbu.getSelectedItem().toString();
       String business_unit=         bu.getSelectedItem().toString();
                String sub_business_unit=sbuu.getSelectedItem().toString();
String service=sc.getSelectedItem().toString();
                String servicec=ssc.getSelectedItem().toString();

                String req=requiremtns.getText().toString();
                FragmentManager fm = getFragmentManager();
                Add add = new Add();

                // bundle.putString("yes", str);
                //    Log.i("Bundle", bundle.toString());
                //    Log.v("Add", str);
                // add.setArguments(bundle);
                Main2Activity.sbu=str;
                Main2Activity.bu=business_unit;
                Main2Activity.sbuu=sub_business_unit;
                Main2Activity.sc=service;
                Main2Activity.ssc=servicec;
                Main2Activity.req=req;
                FragmentTransaction ft = fm.beginTransaction();
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.replace(R.id.content_frame, add, "hi");

                //add.lv.setVisibility(View.VISIBLE);
                ft.addToBackStack(null);
                ft.commit();


            }

        });
        return view;
    }

}

fragment a:

   package first.service.precision.servicefirst;

/**
 * Created by 4264 on 23-11-2015.
 */
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by 4264 on 16-10-2015.
 */
public  class Add extends Fragment implements View.OnClickListener
{
    private ListView lv;
 static    String  sbu,sbuu,sc,ssc,req;
    static String bu;
    static boolean single;
    Add add;

    customListAdapterldrequirements cus;
    private ArrayList<LdNewsItem>ldnews;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        try {
            View rootView = inflater.inflate(R.layout.activity_btn_add, container, false);
            Spinner ldsource=(Spinner)rootView.findViewById(R.id.lead_source);
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                    getActivity().getBaseContext(), R.array.dropbox1, R.layout.spinnerlayout);


            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            ldsource.setAdapter(adapter);
            //   EditText editText=(EditText)rootView.findViewById(R.id.title);

            Spinner ldtype=(Spinner)rootView.findViewById(R.id.ldtype);
            ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
                    getActivity().getBaseContext(), R.array.dropbox2,R.layout.spinnerlayout);

            adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            ldtype.setAdapter(adapter1);
            Spinner ldstatus=(Spinner)rootView.findViewById(R.id.ldstatus);
            TextView txt=(TextView)rootView.findViewById(R.id.spinnerTarget);
            ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
                    getActivity().getBaseContext(), R.array.dropbox3, R.layout.spinnerlayout);

            adapter2.setDropDownViewResource(android.R.layout.simple_selectable_list_item);
            ldstatus.setAdapter(adapter2);
            //  Bundle bundle=getArguments();
            //  String good=bundle.getString("sbu");




            Bundle bundle=getArguments();

//            sbu = getArguments().getString("yes");


            //    public boolean onTouch(View v, MotionEvent event) {
            //        return false;
            // }

            // Setting on Touch Listener for handling the touch inside ScrollView


            //});

            lv = (ListView) rootView.findViewById(R.id.ldrequirements);
//customListAdapterldrequirements customListAdapterldrequirements=new customListAdapterldrequirements(getActivity(),listContact);

            ArrayList<LdNewsItem> listContact = GetlistContact();
            lv.setAdapter(new customListAdapterldrequirements(getActivity(), listContact));
customListAdapterldrequirements customListAdapterldrequirements=new customListAdapterldrequirements(getActivity(),listContact);

            //   cus=new customListAdapterldrequirements(this,ldnews);
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,
                                        long id) {

                    if (single) {
                        NewRequirements newRequirements = new NewRequirements();
                        FragmentManager fm = getFragmentManager();
                        FragmentTransaction ft = fm.beginTransaction();
                        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

                        //  lv.deferNotifyDataSetChanged();
                        ft.replace(R.id.content_frame, newRequirements, "hi");
                        ft.addToBackStack(null);
                        ft.commit();

                    } else {

                        lv.getItemIdAtPosition(position);
                    }
                }
            });
      /*  lv.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return false;
            }


            // Setting on Touch Listener for handling the touch inside ScrollView
      //      @Override
        //    public boolean onTouch(View v, MotionEvent event) {
                // Disallow the touch request for parent scroll on touch of child view

          //      v.getParent().requestDisallowInterceptTouchEvent(true);
//
  //              return false;
    //        }
        });*/
            return rootView;

        }catch (Exception e){
            throw e;
        }
    }




    private ArrayList<LdNewsItem> GetlistContact()
    {
        ArrayList<LdNewsItem> contactlist = new ArrayList<LdNewsItem>();
        //    String str=getArguments().getString("yes");


        //   String str="test";
        //  NewRequirements newr=new NewRequirements();
//        String yog=getArguments().getString("sbu");
//        sbu.notify();
        sbu=Main2Activity.sbu;
        bu=Main2Activity.bu;
        sbuu=Main2Activity.sbuu;
        sc=Main2Activity.sc;
        ssc=Main2Activity.ssc;
        req=Main2Activity.req;
        for(int i=1;i<=5;i++) {
            LdNewsItem    contact = new LdNewsItem();
            contact.setSbu(sbu);
            contact.setBu(bu);
            contact.setSbuu(sbuu);
            contact.setSc(sc);
            contact.setSsc(ssc);
            contact.setReq(req);
            // contact.setReporterName("No matter how big your house is, how recent your car is, or how big your bank account is — our graves will always be the same size. Stay humble." + i);
            contactlist.add(contact);
//lv.setAdapter((ListAdapter) contactlist);

        }

        return contactlist;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        Fragment fragment=null;
        setHasOptionsMenu(true);
        Button btnrequirements=(Button)getActivity().findViewById(R.id.btnrequirements);
        btnrequirements.setOnClickListener(this);
        Button btnactnt=(Button)getActivity().findViewById(R.id.btnacnt);
        btnactnt.setOnClickListener(this);
        Button btnprimary=(Button)getActivity().findViewById(R.id.btnprimary);
        btnprimary.setOnClickListener(this);
        Button btnsecondary=(Button)getActivity().findViewById(R.id.btnsecondary);
        btnsecondary.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btnrequirements:
                Fragment newFragment = new NewRequirements();
                // consider using Java coding conventions (upper first char class names!!!)
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                // Replace whatever is in the fragment_container view with this fragment,
                // and add the transaction to the back stack
                transaction.replace(R.id.content_frame, newFragment);
                transaction.addToBackStack(null);
                // Commit the transaction
                transaction.commit();
                break;

            case R.id.btnacnt:
                FragmentManager fm=getFragmentManager();
                //FragmentTransaction ft=fm.beginTransaction();
                SelectAccountDialog selectAccountDialog=new SelectAccountDialog();
                selectAccountDialog.setRetainInstance(true);
                selectAccountDialog.show(fm, "fragment_name");

                //ft.addToBackStack(null);

                break;
            case R.id.btnprimary:
                FragmentManager fmm=getFragmentManager();
                // FragmentTransaction ftt=fmm.beginTransaction();
                SelectAccountDialog selectAccountDialog1=new SelectAccountDialog();
                selectAccountDialog1.setRetainInstance(true);
                selectAccountDialog1.show(fmm, "fragment_name");
                //   ftt.addToBackStack(null);
                break;
            case R.id.btnsecondary:
                FragmentManager fm2=getFragmentManager();
                //     FragmentTransaction fttt=fm2.beginTransaction();
                SelectAccountDialog selectAccountDialog2=new SelectAccountDialog();
                selectAccountDialog2.setRetainInstance(true);
                selectAccountDialog2.show(fm2,"fragment_name");
                //     fttt.addToBackStack(null);
                break;

        }

    }


    public void updateListView() {
   cus.notifyDataSetChanged();
    }
}

this is my customlistadapter:

  package first.service.precision.servicefirst;

/**
 * Created by 4264 on 23-11-2015.
 */
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by 4264 on 12-11-2015.
 */
public class customListAdapterldrequirements extends BaseAdapter{

    Add add;
    private ArrayList<LdNewsItem> listData;
    private LayoutInflater layoutInflater;

    public customListAdapterldrequirements(Context context, ArrayList<LdNewsItem> listData) {
        this.listData = listData;
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {

        return listData.size();
    }

    @Override
    public Object getItem(int position) {

        return listData.get(position);
    }


    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        View mview = convertView;

        // convertView.setBackgroundColor(Color.parseColor("#E5E5E5"));

        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.list_ld_requirements, null);

            holder = new ViewHolder();
            holder.headlineView = (TextView) convertView.findViewById(R.id.sbu);
            holder.reporterNameView = (TextView) convertView.findViewById(R.id.bu);
            holder.reportedDateView = (TextView) convertView.findViewById(R.id.sbuu);
            holder.ldstatusView = (TextView) convertView.findViewById(R.id.sc);
            holder.ldtype = (TextView) convertView.findViewById(R.id.ssc);
            holder.ldsource = (TextView) convertView.findViewById(R.id.rq);
        //    add.lv.setVisibility(View.INVISIBLE);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
    //    add.lv.setVisibility(View.VISIBLE);
        holder.headlineView.setText("Strategic Business Unit: " + listData.get(position).getSbu());
        holder.reportedDateView.setText("Business Unit: " + listData.get(position).getSbuu());
        holder.ldstatusView.setText("Sub Business Unit: " + listData.get(position).getSc());
        holder.ldtype.setText("Service Category: " + listData.get(position).getSsc());
        holder.ldsource.setText("Service Sub Category: " + listData.get(position).getReq());


        convertView.setBackgroundColor(Color.parseColor("#E5E5E5"));



        // holder.headlineView.setText("Requirements: " +listData.get(position).getReq());


        return convertView;
    }

    static class ViewHolder {
        public TextView headlineView;
        public TextView reporterNameView;
        public TextView reportedDateView;
        public TextView ldstatusView;
        public TextView ldtype;
        public TextView ldsource;
        public TextView req;
    }
}

my main activity:

package first.service.precision.servicefirst;

import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;


public class Main2Activity extends Activity  {

    public static String sbu,bu,sbuu,sc,ssc,req;

    // Within which the entire activity is enclosed
    private DrawerLayout mDrawerLayout;

    // ListView represents Navigation Drawer
    private ListView mDrawerList;
    Button butonlead;
    // ActionBarDrawerToggle indicates the presence of Navigation Drawer in the action bar
    private ActionBarDrawerToggle mDrawerToggle;

    // Title of the action bar
    private String mTitle = "";


    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        final ActionBar ab = getActionBar();
        ab.show();
        // Getting reference to the DrawerLayout
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        ab.setTitle(mTitle);

        mDrawerList = (ListView) findViewById(R.id.drawer_list);

        // Getting reference to the ActionBarDrawerToggle
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,

                R.string.open_drawer,
                R.string.close_drawer) {

            /** Called when drawer is closed */
            public void onDrawerClosed(View view) {

                invalidateOptionsMenu();

            }

            /** Called when a drawer is opened */
            public void onDrawerOpened(View drawerView) {

                invalidateOptionsMenu();
            }


        };

        // Setting DrawerToggle on DrawerLayout
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        // Creating an ArrayAdapter to add items to the listview mDrawerList
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplication(),
                R.layout.drawer_list_item, R.id.title, getResources().getStringArray(R.array.option));

        // Setting the adapter on mDrawerList
        mDrawerList.setAdapter(adapter);

        // Enabling Home button
        ab.setHomeButtonEnabled(true);
        ab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#53A93F")));
        // Enabling Up navigation
        ab.show();
        ab.setDisplayHomeAsUpEnabled(true);

        // Setting item click listener for the listview mDrawerList
        mDrawerList.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {

                // Getting an array of options
                String[] menuItems = getResources().getStringArray(R.array.option);

                // Currently selected option
                mTitle = menuItems[position];

                Fragment fragment = null;
                switch (position) {
                    case 0:
                        fragment = new Leads();
                        break;
                    case 1:
                        fragment = new Opportunities();
                        break;
                    case 2:
                        fragment = new Accounts();
                        break;
                    case 3:
                        fragment = new Contactss();
                        break;
                    case 4:
                        fragment = new Documents();
                        break;
                    case 5:
                        fragment = new Reports();
                    default:
                        break;
                }
                if (fragment != null) {
                    // Getting reference to the FragmentManager
                    FragmentManager fragmentManager = getFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).addToBackStack("fragback").commit();
                    // Creating a fragment transaction
                    FragmentTransaction ft = fragmentManager.beginTransaction();

                    // Adding a fragment to the fragment transaction
                    ft.replace(R.id.content_frame, fragment);

                    // Committing the transaction
                    ft.commit();

                    // Closing the drawer
                    mDrawerLayout.closeDrawer(mDrawerList);
                } else {
                    // error in creating fragment
                    Log.e("MainActivity", "Error in creating fragment");
                }

            }
        });
    }

    @Override
    public void onBackPressed() {
        if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
            mDrawerLayout.closeDrawer(mDrawerList);
        } else {
            super.onBackPressed();
        }

    }


    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * Called whenever we call invalidateOptionsMenu()
     */
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // If the drawer is open, hide action items related to the content view
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);


        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main2, menu);
        return super.onCreateOptionsMenu(menu);
    }



   /* @Override
    public void DataTransfer(String e) {


    }*/
//
    // @Override
    //  public void DataTransfer(ArrayList<String> e) {
    //     Add obj=(Add)getFragmentManager().findFragmentById(R.id.frag_1);
    //   obj.GetlistContact(e);
    // }
}
  /*  @Override
    public void selectedvalue(String s) {
            Add add=new Add();
            FragmentManager fm=getFragmentManager();
            FragmentTransaction ft=fm.beginTransaction();
            ft.replace(R.id.content_frame,add);
            ft.commit();}
    }
*/

I hope you guys here to help us beginner like us thanks in advance!

解决方案

Hi you can update your frag a from frag b by using fragment TAGS from fragB you can call like this,

     fragA f = (fragA)getSupportFragmentManager().findFragmentByTag("yourfragATag");
     // update the list view
     f.updateListView(); 

now how to declare tag....

you can assign tagname at the time when fragment is attaching to container in MainActivity

    ///this is how you can set tags

Fragment fragment = null;
String tag="";
                switch (position) {
                    case 0:
                        fragment = new Leads();
                      tag="leads";
                        break;
                    case 1:
                    tag="Opportunities"
                        fragment = new Opportunities();
                        break;
                    case 2:
                     tag="Accounts";
                        fragment = new Accounts();
                        break;
                    case 3:
                        tag="Contactss";
                        fragment = new Contactss();
                        break;
                    case 4:
                        fragment = new Documents();
                        break;
                    case 5:
                        fragment = new Reports();
                    default:
                        break;
                }
                if (fragment != null) {
                    // Getting reference to the FragmentManager
                    FragmentManager fragmentManager = getFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).addToBackStack("fragback").commit();
                    // Creating a fragment transaction
                    FragmentTransaction ft = fragmentManager.beginTransaction();

                    // Adding a fragment to the fragment transaction
                    ft.replace(R.id.content_frame, fragment,tag);

                    // Committing the transaction
                    ft.commit();

                    // Closing the drawer
                    mDrawerLayout.closeDrawer(mDrawerList);
                } 

:)

这篇关于片段之间notifydatasetchange不工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆