Android GridAdapter在屏幕上显示view0而不是view4方向已更改
我有一个Android GridAdapter在屏幕上显示view0而不是view4方向已更改,android,orientation,android-gridview,baseadapter,onconfigurationchanged,Android,Orientation,Android Gridview,Baseadapter,Onconfigurationchanged,我有一个GridView和一个BaseAdapter,显示如下6个按钮: 肖像: B11 B12 B21 B22 B31 B32 景观: B11 B12 B21 B22 B31 B32 一切都很好,直到我从风景画切换回肖像画。然后显示: 肖像: B11 B12 B21 B22 B11 B32 所以它显示了B11两次。当我点击它时,它仍然会得到正确的位置(4)并且崩溃,因为它找不到正确的按钮ID 以下是适配器的代码: public class RightSlideMenuGridAda
GridView
和一个BaseAdapter
,显示如下6个按钮:
- 肖像:
- 景观:
- 肖像:
public class RightSlideMenuGridAdapter extends BaseAdapter {
private Context mContext;
private String TAG = "RightSlideMenuGridAdapter";
public RightSlideMenuGridAdapter(Context c) {
mContext = c;
}
public int getCount() {
return 6;
}
public Object getItem(int position) {
Log.i(TAG, "getItem" + Integer.toString(position));
return null;
}
public long getItemId(int position) {
Log.i(TAG, "getItemId" + Integer.toString(position));
long retId = 0;
// Nothing worked here. Maybe I should return something?
return retId;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
View child = convertView;
if (child == null) {
Context c = CobraApplication.getAppContext();
Log.i(TAG, "getView" + Integer.toString(position));
switch (position) {
case 0:
child = (View) ((LayoutInflater) CobraApplication
.getAppContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE)).inflate(
R.layout.toolscity, null);
Button btnToolscityhwy = (Button) child
.findViewById(R.id.toolscityhwy);
if (PersistentStoreHelper
.getDetectorSetting(DetectorSettings.DIR_MOB_IRAD_CITY_MODE
.name()) == CommunicationProtocol.DIR_MOB_IRAD_SETTING_HIGHWAY) { // VK:
// The
// setting
// is
// highway
// VK: Show the highway icon
btnToolscityhwy.setBackgroundDrawable(CobraApplication
.getAppContext().getResources()
.getDrawable(R.drawable.toolshwy));
btnToolscityhwy.setText(c.getResources().getString(
R.string.city));
} else {
btnToolscityhwy.setBackgroundDrawable(CobraApplication
.getAppContext().getResources()
.getDrawable(R.drawable.toolscity));
btnToolscityhwy.setText(c.getResources().getString(
R.string.highway));
}
break;
case 1:
child = (View) ((LayoutInflater) CobraApplication
.getAppContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE)).inflate(
R.layout.toolscarfinderbutton, null);
ToggleButton btnToolsCarFinder = (ToggleButton) child
.findViewById(R.id.myToggleButtoncarfinder);
// VK: Here we need to check the current setting of car finder
// and set button state appropriately
if (PersistentStoreHelper
.getNonDetectorSetting(NonDetectorSettings.CAR_FINDER_SETTING
.name()) == CommunicationProtocol.DIR_MOB_IRAD_SETTING_ON) {
btnToolsCarFinder.setChecked(true);
} else {
btnToolsCarFinder.setChecked(false);
}
break;
case 2:
child = (View) ((LayoutInflater) CobraApplication
.getAppContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE)).inflate(
R.layout.toolstrafficbutton, null);
ToggleButton btnToolsTraffic = (ToggleButton) child
.findViewById(R.id.myToggleButtonTraffic);
btnToolsTraffic.setChecked(PersistentStoreHelper
.getTrafficDisplayState());
break;
case 3:
child = (View) ((LayoutInflater) CobraApplication
.getAppContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE)).inflate(
R.layout.toolsmenulegend, null);
break;
case 4:
child = (View) ((LayoutInflater) CobraApplication
.getAppContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE)).inflate(
R.layout.toolsmusic, null);
ToggleButton btnToolsMusic = (ToggleButton) child
.findViewById(R.id.myToggleButtonMusicControl);
btnToolsMusic.setChecked(PersistentStoreHelper
.getMusicControlDisplayState());
break;
case 5:
child = (View) ((LayoutInflater) CobraApplication
.getAppContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE)).inflate(
R.layout.toolsdirectionsmenu, null);
break;
}
}
child.setPadding(0, 0, 0, 0);
child.setFocusable(false);
child.setClickable(false);
return child;
}
下面是:GridInit
grait-OK的跟踪。然后将方向更改为横向-仍然可以。然后回到肖像画。而且它被观看了两次
02-26 09:17:14.960: I/RightSlideMenuGridAdapter(12207): getView0
02-26 09:17:14.970: I/RightSlideMenuGridAdapter(12207): getView1
02-26 09:17:14.985: I/RightSlideMenuGridAdapter(12207): getView2
02-26 09:17:15.005: I/RightSlideMenuGridAdapter(12207): getView3
02-26 09:17:15.015: I/RightSlideMenuGridAdapter(12207): getView4
02-26 09:17:15.030: I/RightSlideMenuGridAdapter(12207): getView5
02-26 09:17:20.660: I/RightSlideMenuGridView(12207): MenuSize:600
02-26 09:17:20.665: I/RightSlideMenuGridView(12207): MenuSize:600
02-26 09:17:20.680: I/RightSlideMenuGridAdapter(12207): getView0
02-26 09:17:20.685: I/RightSlideMenuGridAdapter(12207): getView1
02-26 09:17:20.690: I/RightSlideMenuGridAdapter(12207): getView2
02-26 09:17:20.695: I/RightSlideMenuGridAdapter(12207): getView3
02-26 09:17:20.700: I/RightSlideMenuGridAdapter(12207): getView4
02-26 09:17:20.705: I/RightSlideMenuGridAdapter(12207): getView5
02-26 09:17:20.825: I/RightSlideMenuGridAdapter(12207): getView0
02-26 09:17:20.835: I/RightSlideMenuGridAdapter(12207): getItemId0
02-26 09:17:28.680: I/RightSlideMenuGridView(12207): MenuSize:375
02-26 09:17:28.680: I/RightSlideMenuGridView(12207): MenuSize:375
02-26 09:17:28.700: I/RightSlideMenuGridAdapter(12207): getView0
02-26 09:17:28.705: I/RightSlideMenuGridAdapter(12207): getView1
02-26 09:17:28.710: I/RightSlideMenuGridAdapter(12207): getView2
02-26 09:17:28.715: I/RightSlideMenuGridAdapter(12207): getView3
02-26 09:17:28.905: I/RightSlideMenuGridAdapter(12207): getView0
02-26 09:17:28.935: I/RightSlideMenuGridAdapter(12207): getItemId0
02-26 09:17:28.940: I/RightSlideMenuGridAdapter(12207): getView5
@LaiVung我已经在使用Log类了。“我不明白你的意思。”莱翁看上面,你明白了。在正确的情况下,它有时使用位置4调用getView。其他时候,它调用位置为0的getView并在位置4显示它…@LaiVung崩溃和异常只是按下按钮4的结果,它调用onClick 4,而onClick 4找不到正确的按钮id。因为它不在屏幕上!但这不是问题所在!!!问题是我有按钮0显示了两次!在位置0和4。再仔细读一遍。@LaiVung没问题!我感谢你的帮助。请再次理解。如果我在错误的情况下不按下按钮,它不会显示异常。没有发生碰撞。只是屏幕上的一个错误按钮!好啊这就是我们正在努力解决的问题。