继承FragmentActivity的两个类跳转时startActivity点击无响应如何解决
问题根因
- 点击事件绑定错误:仅给
R.id.editTextFrom输入框设置了点击监听器,R.id.imageViewbfrom、R.id.NexttbtnLP2两个控件完全没有绑定点击事件,点击这两个控件自然不会触发任何跳转逻辑 - 逻辑顺序错误:就算点击绑定了监听的from输入框,代码会先执行
startActivityForResult调起谷歌地址自动补全页面直接跳走,后续的switch判断逻辑根本没有执行机会 - 判断逻辑放置错误:把不同控件的点击判断写在了from这一个控件的点击回调里,就算触发回调也只会匹配到from的控件id,永远走不到另外两个跳转分支
修复方案
将点击事件抽离统一管理,给所有需要响应点击的控件绑定监听器即可,修复后代码如下:
public class LocationPicker_2 extends FragmentActivity implements OnMapReadyCallback, View.OnClickListener { // 原有成员变量声明保持不变 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location_picker2); supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); supportMapFragment.getMapAsync(this); // 初始化所有需要交互的控件 from = findViewById(R.id.editTextFrom); ImageView ivBackFrom = findViewById(R.id.imageViewbfrom); Button btnNext = findViewById(R.id.NexttbtnLP2); Places.initialize(getApplicationContext(),"AIzaSyCIwPlfTKNCGDcoMuOWwNTTyG5tnI_MyqM"); // 给所有控件绑定统一的点击监听器 from.setOnClickListener(this); ivBackFrom.setOnClickListener(this); btnNext.setOnClickListener(this); } // 统一处理所有点击逻辑 @Override public void onClick(View v) { switch(v.getId()){ case R.id.editTextFrom: // 只有点击输入框时才调起地址自动补全 field = Arrays.asList(Place.Field.ADDRESS,Place.Field.NAME,Place.Field.LAT_LNG); Intent intent = new Autocomplete.IntentBuilder(AutocompleteActivityMode.OVERLAY,field).build(LocationPicker_2.this); startActivityForResult(intent,place_picker_req_code); break; case R.id.imageViewbfrom: startActivity(new Intent(LocationPicker_2.this,LocationPicker.class)); break; case R.id.NexttbtnLP2: startActivity(new Intent(LocationPicker_2.this,Selectdate.class)); break; } } // 其他原有逻辑保持不变 }
额外注意:请确认
AndroidManifest.xml中已经完成LocationPicker、Selectdate两个Activity的注册,未注册的Activity也会导致跳转无响应甚至崩溃。
内容的提问来源于stack exchange,提问作者Raaid Khan
相关产品推荐
相关产品推荐

