首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问片段并将其转换为主要活动

如何访问片段并将其转换为主要活动
EN

Stack Overflow用户
提问于 2017-04-10 05:12:33
回答 2查看 108关注 0票数 0

我有一个Activity Main类和XMLana_sayfa (Fragment)类和XML

当我滑动屏幕并显示ana_sayfa时,我希望将项添加到可扩展的列表视图中,但无法将ana_sayfa Fragment访问到主活动类中。

Main_activity类:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    Button b1;


    private ResideMenu resideMenu;
    private Context mContext;
    private ResideMenuItem itemAnasayfa;
    private ResideMenuItem itemRastgele;
    private ResideMenuItem itemEncok;
    private ResideMenuItem itemTarifyaz;

    private ExpandableListView listView;
    private ExpandableListAdapter listAdapter;
    private List<String> listDataHeader;
    private HashMap<String,List<String>> listHash;


    private View view2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        setUpMenu();
        if (savedInstanceState == null) {

            changeFragment(new F_ana_sayfa());

        }


       /** listView=(ExpandableListView)findViewById(R.id.exp2);
        initData();
        listAdapter=new com.yeni.ExpandableListAdapter(this,listDataHeader,listHash);
        listView.setAdapter(listAdapter);
        */
    }

    private void initData() {
        listDataHeader=new ArrayList<>();
        listHash=new HashMap<>();

        listDataHeader.add("et");
        listDataHeader.add("tavuk");
        listDataHeader.add("sebze");
        listDataHeader.add("diger");

        List<String> l_et=new ArrayList<>();
        l_et.add("kemikli");
        l_et.add("kuşbaşı");

        List<String> l_tavuk=new ArrayList<>();
        l_tavuk.add("bonfile");
        l_tavuk.add("but");
        l_tavuk.add("bütün tavuk");

        List<String> l_sebze=new ArrayList<>();
        l_sebze.add("patates");
        l_sebze.add("biber");
        l_sebze.add("kabak");
        l_sebze.add("patlıcan");

        List<String> l_diger=new ArrayList<>();
        l_diger.add("tuz");
        l_diger.add("yağ");
        l_diger.add("kekik");

        listHash.put(listDataHeader.get(0),l_et);
        listHash.put(listDataHeader.get(1),l_tavuk);
        listHash.put(listDataHeader.get(2),l_sebze);
        listHash.put(listDataHeader.get(3),l_diger);
    }

    private void setUpMenu() {
        resideMenu = new ResideMenu(this);
        resideMenu.setBackground(R.drawable.menu_background);
        resideMenu.attachToActivity(this);


        resideMenu.setMenuListener(menuListener);
        resideMenu.setScaleValue(0.6f);
        //create menu items;
        itemAnasayfa = new ResideMenuItem(this, R.drawable.icon_home, "Ana Sayfa");
        itemRastgele = new ResideMenuItem(this, R.drawable.icon_profile, "Random tarif bul");
        itemEncok = new ResideMenuItem(this, R.drawable.icon_calendar, "En cok begenilenler");
        itemTarifyaz = new ResideMenuItem(this, R.drawable.icon_settings, "tarif Yaz");


        itemAnasayfa.setOnClickListener(this);
        itemRastgele.setOnClickListener(this);
        itemEncok.setOnClickListener(this);
        itemTarifyaz.setOnClickListener(this);


        resideMenu.addMenuItem(itemAnasayfa, ResideMenu.DIRECTION_LEFT);
        resideMenu.addMenuItem(itemRastgele, ResideMenu.DIRECTION_LEFT);
        resideMenu.addMenuItem(itemEncok, ResideMenu.DIRECTION_RIGHT);
        resideMenu.addMenuItem(itemTarifyaz, ResideMenu.DIRECTION_RIGHT);

        findViewById(R.id.title_bar_left_menu).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                resideMenu.openMenu(ResideMenu.DIRECTION_LEFT);
            }
        });

        findViewById(R.id.title_bar_right_menu).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                resideMenu.openMenu(ResideMenu.DIRECTION_RIGHT);
            }
        });
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        return resideMenu.dispatchTouchEvent(ev);
    }

    @Override
    public void onClick(View view) {

        if (view == itemAnasayfa) {

            changeFragment(new F_ana_sayfa());

            listView=(ExpandableListView)findViewById(R.id.exp2);
            initData();
            listAdapter=new com.yeni.ExpandableListAdapter(this,listDataHeader,listHash);
            listView.setAdapter(listAdapter);

        } else if (view == itemRastgele) {
            changeFragment(new F_rastgele_tarif());
        } else if (view == itemEncok) {
            changeFragment(new F_encok_beg());
        } else if (view == itemTarifyaz) {
            changeFragment(new F_tarif_yaz());
        }

        resideMenu.closeMenu();
    }

    private ResideMenu.OnMenuListener menuListener = new ResideMenu.OnMenuListener() {
        @Override
        public void openMenu() {
            Toast.makeText(mContext, "Menu is aÇILDIIII!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void closeMenu() {

            Toast.makeText(mContext, "Menu is KAPANDI!", Toast.LENGTH_SHORT).show();
        }
    };

    private void changeFragment(Fragment targetFragment) {
        resideMenu.clearIgnoredViewList();
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.main_fragment, targetFragment, "fragment")
                .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
                .commit();
    }

    public ResideMenu getResideMenu(){
        return resideMenu;
    }
}

ana_sayfa类:

代码语言:javascript
复制
public class F_ana_sayfa extends Fragment {

    private View parentView;
    private ResideMenu resideMenu;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        parentView = inflater.inflate(R.layout.ana_sayfa, container, false);
        //setUpViews();
        return parentView;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-10 06:45:49

您可以使用interface在活动和片段之间进行通信。例如,在片段类中可以添加:

代码语言:javascript
复制
public class F_ana_sayfa extends Fragment {

    ...

    SomeInterface myInterface;

    // Container activity must implement this interface
    public interface SomeInterface {
        // You can define your interface functions here
        void doSomething();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            myInterface = (SomeInterface) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement SomeInterface");
        }
    }

    public void someFunction(boolean someBoolean) {
        if (someBoolean) {
            // Calling the interface function
            myInterface.doSomething();
        }
    }
}

现在,您的活动必须实现片段类中定义的接口。例如:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements F_ana_sayfa.SomeInterface {

    ...

    public void doSomething() {
        // Your code here
    }
}

欲了解更多信息,请访问https://developer.android.com/training/basics/fragments/communicating.html

票数 0
EN

Stack Overflow用户

发布于 2017-04-10 05:47:18

使用setArguments(Bundle)将数据传递给片段,并使用getArguments()检索onCreateView()中的数据。然后,片段可以处理在列表视图中呈现数据的所有逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43315384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档