java - 运行 Activity 时无限循环

标签 java android tabs android-activity

我有这门课:

public class Map extends ActionBarActivity implements TabListener{

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

     // Set up the action bar.
        final ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        ActionBar.Tab ttestTab = actionBar.newTab().setText("The test");
        ActionBar.Tab chatTab = actionBar.newTab().setText("Chat");

        testTab.setTabListener(this);
        chatTab.setTabListener(this);

        actionBar.addTab(testTab, false);
        actionBar.addTab(chatTab, true);

        GoogleMap map = ((MapFragment) getFragmentManager()
                .findFragmentById(R.id.map)).getMap();

        LatLng mapCenter = new LatLng(41.889, -87.622);
        LatLng mapCenter2 = new LatLng(41.889, -85.622);

        map.addMarker(new MarkerOptions()
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.orienteering))
        .position(mapCenter)
        .flat(true)
);

        map.addMarker(new MarkerOptions()
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.orienteering))
        .position(mapCenter2)
        .flat(true)
);

//        CameraPosition cameraPosition = CameraPosition.builder()
//                .target(mapCenter)
//                .zoom(13)
//                .bearing(90)
//                .build();

//        map.moveCamera(CameraUpdateFactory.newLatLngZoom(
//                new LatLng(-18.142, 178.431), 2));

        map.setMapType(GoogleMap.MAP_TYPE_HYBRID);

     // Animate the change in camera view over 2 seconds
//        map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition),
//                2000, null);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater actionMenue = getMenuInflater();
        actionMenue.inflate(R.menu.the_map, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        if (id == R.id.goBack) {
            this.finish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_the_map,
                    container, false);
            return rootView;
        }
    }



    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        int position = tab.getPosition();
        switch(position){
            case 0:
//              Intent displayTheMap = new Intent(this, Map.class);
//              startActivity(displayTheMap);
//              this.finish();

                Toast.makeText(getApplicationContext(),
                "case 0", Toast.LENGTH_SHORT).show();

               break;

            case 1:             
                Toast.makeText(getApplicationContext(),
                "case 1", Toast.LENGTH_SHORT).show();

                Intent displayTheMap = new Intent(this, Map.class);
                startActivity(displayTheMap);
                this.finish();

               break;
        }       
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

}

如您所见,我已将 chatTab 标记为选中状态,并且我在 onTabSelected 中有 2 个案例,这两个案例都显示了 toast ,并显示消息 witch case is selected .

现在我通过以下方式在我的 MainActivity 中调用上面的 Map 类:

Intent displayTheMap = new Intent(this, Map.class);
            startActivity(displayTheMap);

并且模拟器一遍又一遍地显示 toast 消息 case 1

为什么会这样?为什么它一遍又一遍地循环通过 case 1? case 0 不是已经被标记为选中了吗?我知道我在这里遗漏了一个非常小的部分,但我无法发现它。

最佳答案

  1. 在 Activity Map 中,您要添加一个选项卡并将其选中 (actionBar.addTab(chatTab, true);
  2. 您有一个 TabListener,它在选择选项卡时再次启动 Map Activity (startActivity(displayTheMap);)

你是对的,这是一个无限循环。

如果您希望初始选择位置 0 处的选项卡,则交换您的第二个参数:

actionBar.addTab(testTab, true);
actionBar.addTab(chatTab, false);

关于java - 运行 Activity 时无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23202461/

相关文章:

具有多个值的 Java hashmap

java - SOLRJ 使用 android 应用程序连接本地主机 solr

jquery - 选项卡选择事件不适用于 jQuery 1.8.3

jQuery Twitter Bootstrap 选项卡选择

r - 在不同 tabPanel 的渲染上使用 R Shiny 的服务员时无法正确显示

java - 这是从日期获取 UTC 的 java.sql.Timestamp 的正确方法吗?

java - 如何针对 2 个或更多预期值断言实际值?

java - onActivityResult 没有被触发

android - 避免改造 POJO 冗余

android - RxJava2 与 JUnit : no exceptions thrown in tests