首页 文章

Android:使用片段或更改活动中的所有视图

提问于
浏览
0

我问你对我申请的建议 . 我必须开发一个具有以下特征的应用程序:

1-只肖像

2-当打开应用程序时,它显示蓝牙设备呈现

3-当您点击一个设备时,该应用程序会向用户询问解锁代码并显示连接按钮

4-按下连接按钮后,应用程序显示一个加载微调器栏,带有两个或三个按钮

重点是:我是否更好地为每种行为使用了三种不同的片段?

现在我做了:

扫描设备的一个活动

解锁代码的一个活动

但我不知道在哪里可以放入加载屏幕(加载微调器栏和三个按钮)

现在我想以不同的方式发展 . 一个处理3个不同片段加载的中心活动:

  • 一个用于扫描设备

  • 一个用于解锁代码,另一个用于加载屏幕

但我是Android编程的新手,我总是想知道我是以正确的方式还是以错误的方式思考 .

最后:为了将所选设备从片段传递到活动,我想我将在mainactivity中实现一个监听器 . 这样对吗 ?

**编辑: *我对主要问题有另一个疑问 . ***

现在根据你的建议,我想以这种方式开发这个应用程序:

  • 主要活动

  • 扫描DEvice片段

  • 解锁设备片段

  • 加载片段

  • 已开始服务

在先前的版本中,我想开发三种不同的活动,并使用binder和messange以两种方向与服务进行通信

相反,现在主要活动中有三个不同的片段 . 我的问题是:因为你最好在mainactivity内部或每个片段内部实现对服务的通信?

例如:用户在扫描片段中选择一个设备,该片段直接将选择信息传递给服务,或者将选择信息传递给主要事件,以便将信息转发给服务?

谢谢你的时间 :)

2 回答

  • 1

    not 使用 setContentView() 来更改应用程序的状态,它可能会导致 onBackPressed() 上的不一致问题 - 改为使用片段 . 但是你会在背压时遇到问题,所以你需要查看你的活动中是否有碎片留下来,你需要在这个问题中看到https://stackoverflow.com/a/24527530/2413303 ContainerFragment .

    @Override
        public void onCreate(Bundle saveInstanceState)
        {
            super.onCreate(saveInstanceState);
            this.setContentView(R.layout.activity_container);
            if (saveInstanceState == null)
            {               
                 getSupportFragmentManager().beginTransaction()
                    .add(R.id.activity_container_container, new ExampleFragment())
                    .addToBackStack(null)
                 .commit();
            }
            getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener()
            {
                public void onBackStackChanged()
                {
                    int backCount = getSupportFragmentManager().getBackStackEntryCount();
                    if (backCount == 0)
                    {
                        finish();
                    }
                }
            });
        }
    

    另外,使用 ButterKnife 库,我没有在这个例子中我链接,即使我应该有 . 它使代码更简洁,并做同样的事情 .

    public class FancyFragment extends Fragment {
       @InjectView(R.id.button1) Button button1;
       @InjectView(R.id.button2) Button button2;
    
      @OnClick(R.id.btnSubmit)
      public void submit(View view) {
         // TODO submit data to server...
      }
    
      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.fancy_fragment, container, false);
         ButterKnife.inject(this, view);
         // TODO Use "injected" views...
         return view;
      }
    }
    

    对于通信,您可以根据https://stackoverflow.com/a/28480952/2413303使用 Otto

    public class UpdateListEvent {
    
    }
    
    public class MainActivity extends ActionBarActivity {
        ...
        public void updatelist() {
           SingletonBus.INSTANCE.getBus().post(new UpdateListEvent());
        }
    }
    
    public class FragmentA extends Fragment {
        @Override
        public void onResume() {
            super.onResume();
            SingletonBus.INSTANCE.getBus().register(this);
        }
    
        @Override
        public void onPause() {
            SingletonBus.INSTANCE.getBus().unregister(this);
            super.onPause();
        }
    
        @Subscribe
        public void onUpdateListEvent(UpdateListEvent e) {
             //do things
        }
    }
    
    public enum SingletonBus {
        INSTANCE;
    
        private Bus bus;
    
        private SingletonBus() {
            this.bus = new Bus(ThreadEnforcer.ANY);
        }
    
        public Bus getBus() {
            return bus;
        }
    }
    
  • 0

    我对主要问题有另一个疑问 .

    现在我用这种方式开发这个应用程序:

    • 主要活动

    • 扫描DEvice片段

    • 解锁设备片段

    • 加载片段

    • 已开始服务

    在先前的版本中,我想开发三种不同的活动,并使用binder和messange以两种方向与服务进行通信

    现在,主要活动内部有三个不同的片段,因为您最好在mainactivity内或每个片段内部实现对服务的通信?

    例如 :

    用户在扫描片段中选择一个设备,该片段直接将选择信息传递给服务,或者将选择信息传递给主要事件,以便将信息转发给服务?

相关问题