从活动变为碎片

时间:2014-01-01 20:53:05

标签: android android-fragments android-activity android-actionbar

我正在尝试修复我的应用代码并从“活动”转换为“碎片”,以便转换到导航绘图并最终获得一些滑动选项卡。

目前用于导航我正在使用操作栏中的3点下拉菜单,我知道这是不对的。这就是我试图过渡到片段的原因。

我想保留我的操作栏菜单,以便将搜索图标保留在操作栏中,但我想为其添加导航图。

我当前有一个名为ActionBarMenu的类,它扩展了活动。我的所有活动都是这样形成的,因为这个类包含了我现在设置的操作栏菜单的所有新功能。

public class ActionbarMenu extends Activity {

    public void goToSearch (MenuItem item) {
        // go to search page
        Intent i = new Intent(this,Search.class);
        startActivity(i); 
    }

    public void goToStatistics (MenuItem item) {
        // go to search page
        Intent i = new Intent(this,StatisticsPage.class);
        startActivity(i); 
    }

    public void goToFindBrewery (MenuItem item) {
        // go to search page
        Intent i = new Intent(this,FindBrewery.class);
        startActivity(i);
    }

    public void goToContact (MenuItem item) {
        // go to search page
        Intent i = new Intent(this,ContactPage.class);
        startActivity(i);
    }

    public void goToPortfolio (MenuItem item) {
        // go to search page
        Intent i = new Intent(this,Portfolio.class);
        startActivity(i);
    }

    public void goToDiscover (MenuItem item) {
        // go to search page
        Intent i = new Intent(this,Discover.class);
        startActivity(i);
    }

    public void scanBarcode (MenuItem item) {
        //open scanner
        IntentIntegrator scanIntegrator = new IntentIntegrator(this);
        scanIntegrator.initiateScan();
    }

    //get result value
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {

        // retrieve scan result
        IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
        if (scanningResult != null) {
            // we have a result
            String scanContent = scanningResult.getContents();
            // launch async task for results
            String url = "http://api.brewerydb.com/v2/search/upc?code=" + scanContent + "&key=0cdb22f84315834cc807c0176a927060&format=json&withBreweries=y";

            new GetBeerDataFromUPCJSON(this).execute(url);
        } else {
            Toast toast = Toast.makeText(getApplicationContext(), "No scan data received!", Toast.LENGTH_SHORT);
            toast.show();
        }
    }
}

我尝试通过将扩展活动更改为扩展Fragment来将其更改为片段,并且我为了启动新活动而构建的所有意图都获得了红色波浪线下划线。我只是在尝试并尝试了解正在发生的事情,并且了解将应用程序从活动转移到Fragments的最佳方式,而无需重新编码所有内容。

5 个答案:

答案 0 :(得分:2)

你的问题可能是因为像

这样的行
Intent i = new Intent(this, Discover.class);

this现在指的是Fragment而不是ActivityIntent()期望Context作为第一个参数; Activity延伸Context,但Fragment没有。要解决您的问题,您应该将this更改为getActivity()

为了将来参考,将鼠标放在错误旁边出现的小红色x上,应该可以准确地告诉您问题所在。

答案 1 :(得分:0)

您将使用片段管理器加载新片段,而不是使用意图。阅读android网站上有关片段的this页面。

答案 2 :(得分:0)

快速更换的完成代码为:

Intent i = new Intent(getActivity(), Discover.class);
startActivity(i);

答案 3 :(得分:0)

如果活动就在您的片段旁边,那么您只需要像背景一样使它变得相同......它应该工作....

        @Override
        public void onClick(View view) {

     onBackPressed();

        }

答案 4 :(得分:-2)

Intent i = new Intent(this, Discover.class);