【问题标题】:Activity to Fragment transition with slide menu使用幻灯片菜单的 Activity 到 Fragment 的过渡
【发布时间】:2016-03-10 09:17:48
【问题描述】:

我正在尝试在 android 上制作应用程序。我在菜单栏中制作了幻灯片,如下面的示例图片所示。蓝色条。这是我的主要活动。现在我想要的是我的每个屏幕都应该显示相同的菜单选项。不是那些有后退按钮的人。我怎么做? 现在我有一个初始化幻灯片菜单和菜单选项的主要活动。它显示的是一个片段的主屏幕。从主屏幕使用按钮我移动到我的下一个屏幕,它是条形码扫描仪,是一个新的活动,没有幻灯片菜单。从这个屏幕我移动到一个新屏幕,它显示扫描仪屏幕的结果,这是一个新的活动,它被放置并通过了额外的意图。

现在我希望结果屏幕也显示与主页相同的幻灯片菜单。

我所有的其他屏幕也都是活动。

我该怎么做?

主幻灯片菜单活动代码:

public class MainActivity extends ActionBarActivity {

DrawerLayout drawerLayout;
RelativeLayout drawerPane;
ListView lvNav;

List<NavItem> listNavItems;
List<Fragment> listFragments;

ActionBarDrawerToggle actionBarDrawerToggle;

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

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerPane = (RelativeLayout) findViewById(R.id.drawer_pane);
    lvNav = (ListView) findViewById(R.id.nav_list);

    listNavItems = new ArrayList<NavItem>();
    listNavItems.add(new NavItem("Home", "MyHome page",
            R.drawable.ic_action_home));
    listNavItems.add(new NavItem("Settings", "Change something",
            R.drawable.ic_action_settings));

主屏幕代码:

 public class MainActivityFrag extends Fragment implements View.OnClickListener {

ImageButton scan;
@Override
public View onCreateView(LayoutInflater inflater,
                         @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    View v = inflater.inflate(R.layout.home_screen, container, false);
    // setContentView(R.layout.home_screen);
    scan=(ImageButton)v.findViewById(R.id.scanBtn);
    scan.setOnClickListener(this);

    return v;
}


public void ScanBarcode(View view) {
    Intent newScreen = new Intent("com.aaa.fyp.SimpleScannerActivity");
    // finish();

    startActivity(newScreen);
    //  finish();
}

条码扫屏码:

   @Override
    public void handleResult(Result rawResult) {
        // Do something with the result here
        AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
        Account[] list = manager.getAccounts();
        String gmail = null;

        for(Account account: list)
        {
            if(account.type.equalsIgnoreCase("com.google"))
            {
                gmail = account.name;
                break;
            }
        }

        Toast.makeText(SimpleScannerActivity.this,gmail,Toast.LENGTH_LONG).show();

        Log.v(TAG, rawResult.getText()); // Prints scan results
       // Toast.makeText(SimpleScannerActivity.this, rawResult.toString() + "  WOW scanned", Toast.LENGTH_LONG).show();
       // Toast.makeText(SimpleScannerActivity.this, rawResult.getBarcodeFormat().toString(), Toast.LENGTH_LONG).show();
        Log.v(TAG, rawResult.getBarcodeFormat().toString()); // Prints the scan format (qrcode, pdf417 etc.)
        //Intent scanScreenResult= new Intent("com.aaa.fyp.ScanResultScreen");

        Intent nextScreen = new Intent("com.aaa.fyp.ScanResultScreen");
        nextScreen.putExtra("barcode",rawResult.toString());
        nextScreen.putExtra("format", rawResult.getBarcodeFormat().toString());
       finish();
        startActivity(nextScreen);

扫描结果屏幕在新活动中显示扫描屏幕的结果。这是我想要相同幻灯片菜单的页面:

public class ScanResultScreen extends SimpleScannerActivity {

ImageView scanned;
TextView bc;
TextView f;
String Barcode;
String format;

TextView d;
@Override
public void onCreate(Bundle state) {
    super.onCreate(state);
    setContentView(R.layout.scan_screen_with_button);
    // setContentView(R.layout.scan_screen_with_button);

    ViewGroup layout = (ViewGroup) findViewById(R.id.scanScreenWithButton);
    layout.setLayoutParams(new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
    //layout.setOrientation(LinearLayout.VERTICAL);

    setContentView(layout);
    Intent prevScreen = getIntent(); // gets the previously created intent

    Barcode=prevScreen.getStringExtra("barcode");
    bc= (TextView)findViewById(R.id.barcode_label);
    bc.setText(Barcode);

    format=prevScreen.getStringExtra("format");
    f=(TextView)findViewById(R.id.format_label);
    f.setText(prevScreen.getStringExtra("format").toString());

【问题讨论】:

    标签: android android-fragments menu slide


    【解决方案1】:

    您是否尝试过创建BaseActivity,它被您的其他活动扩展。在BaseActivity 创建侧边菜单,以便扩展此活动的其他活动使用。

    只是提一下,在“详细视图”活动中包含抽屉菜单(侧边菜单)并不是好的做法(用户体验)。阅读有关提供祖先和时间导航的信息 herehere

    在您的活动之间进行数据交换,您可以使用它:

    Activity1设置数据

    //Get the intent parameters and pass it to aragment
    Class data=new Class();
    //Set data attributes
    Intent detailsIntent = new Intent(getActivity(), Activity2.class);
    detailsIntent.putExtra("data", data);
    getActivity().startActivity(detailsIntent);
    

    Activity2 在 onCreate() 方法中获取数据:

    Class data = ((Class) getIntent().getParcelableExtra("data"));
    //Use data in new activity
    

    在你的情况下:

    Intent nextScreen = new Intent(ScanResultScreen.class);
    nextScreen.putExtra("barcode",rawResult.toString());
    nextScreen.putExtra("format", rawResult.getBarcodeFormat().toString());
    getActivity().startActivity(nextScreen);
    

    在您的 ScanResultScreen 活动中执行此操作:

    String barcode = getIntent().getStringExtra("barcode");
    String format = getIntent().getStringExtra("format");
    

    【讨论】:

    • 是的,我做到了。我也在做的是将数据从一个活动发送到另一个活动。怎么办?
    • 您可以使用 Bundle 发送/检索您的数据。
    • 我是安卓新手。你能用 lil 代码向我解释一下吗?上面给出了我的主要活动代码。它创建了幻灯片菜单。我应该用它扩展我的所有活动吗?以及如何将上面给出的 HandleResult 方法中的意图代码更改为 Bundle 以将数据发送到 ScanResultScreen
    • 我已经更新了我的答案。请检查它是否正确。扩展其他活动取决于您的活动要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多