Android GridView重力场获胜';不变
每当我点击一个按钮时,我都试图改变GridView的重力,但是应用程序在部署时崩溃了。我不确定在XML布局中声明GridView时为什么会发生这种情况 尝试在空对象引用上调用虚拟方法“android.view.ViewGroup$LayoutParams android.widget.GridView.getLayoutParams()” sw600dp/activity_main.xmlAndroid GridView重力场获胜';不变,android,xml,android-layout,gridview,layoutparams,Android,Xml,Android Layout,Gridview,Layoutparams,每当我点击一个按钮时,我都试图改变GridView的重力,但是应用程序在部署时崩溃了。我不确定在XML布局中声明GridView时为什么会发生这种情况 尝试在空对象引用上调用虚拟方法“android.view.ViewGroup$LayoutParams android.widget.GridView.getLayoutParams()” sw600dp/activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Line
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_moveup"
android:text="move up"
android:background="@android:color/transparent"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_gravity="top"
android:onClick="moveup_click"
/>
<GridView
android:id="@+id/abslistview_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:numColumns="auto_fit"
/>
<Button
android:id="@+id/btn_movedown"
android:text="move down"
android:background="@android:color/transparent"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_gravity="bottom"
android:onClick="movedown_click"
/>
</LinearLayout>
MainActivity.java
公共类MainActivity扩展了活动{
Activity mActivity;
private Button btnUp;
private Button btnDown;
private GridView gridMain;
private AbsListView absListView;
private ArrayAdapter<MainItem> adapter;
private ArrayList<MainItem> mainArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
absListView = findViewById(R.id.abslistview_main);
settingData();
adapter = new AbsListViewAdapter(this, R.layout.item_abslistview, mainArrayList);
absListView.setAdapter(adapter);
}
private void settingData() {
mainArrayList = new ArrayList<>();
mainArrayList.add(new MainItem(R.drawable.ic_circle, getResources().getString(R.string.item_1)));
mainArrayList.add(new MainItem(R.drawable.ic_star, getResources().getString(R.string.item_2)));
mainArrayList.add(new MainItem(R.drawable.ic_square, getResources().getString(R.string.item_3)));
mainArrayList.add(new MainItem(R.drawable.ic_triangle, getResources().getString(R.string.item_4)));
mainArrayList.add(new MainItem(R.drawable.ic_rectangle, getResources().getString(R.string.item_5)));
mainArrayList.add(new MainItem(R.drawable.ic_crescent, getResources().getString(R.string.item_6)));
}
public void moveup_click(View view) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) gridMain.getLayoutParams();
gridMain = findViewById(R.id.abslistview_main);
if (params.gravity == Gravity.BOTTOM) {
gridMain.setGravity(Gravity.CENTER_VERTICAL);
btnDown.setVisibility(View.VISIBLE);
} else if (params.gravity == Gravity.CENTER_VERTICAL) {
gridMain.setGravity(Gravity.TOP);
btnUp.setVisibility(View.GONE);
}
}
}
Activity;
专用按钮btnUp;
私人按钮按钮按钮;
私有GridView gridMain;
私有AbsListView AbsListView;
专用阵列适配器;
私有ArrayList mainArrayList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
absListView=findviewbyd(R.id.absListView\u main);
设置数据();
adapter=新的AbsListViewAdapter(此,R.layout.item_abslistview,mainArrayList);
absListView.setAdapter(适配器);
}
私有无效设置数据(){
mainArrayList=新的ArrayList();
添加(新的MainItem(R.drawable.ic_圈,getResources().getString(R.string.item_1));
添加(新的MainItem(R.drawable.ic_star,getResources().getString(R.string.item_2));
添加(新的MainItem(R.drawable.ic_square,getResources().getString(R.string.item_3));
添加(新的MainItem(R.drawable.ic_三角形,getResources().getString(R.string.item_4));
添加(新的MainItem(R.drawable.ic_矩形,getResources().getString(R.string.item_5));
添加(新的MainItem(R.drawable.ic_,getResources().getString(R.string.item_6));
}
公共作废上移\单击(查看){
LinearLayout.LayoutParams params=(LinearLayout.LayoutParams)gridMain.getLayoutParams();
gridMain=findViewById(R.id.abslistview\u main);
if(params.gravity==gravity.BOTTOM){
gridMain.setGravity(重力、垂直中心);
设置可见性(View.VISIBLE);
}否则如果(参数重力==重力中心垂直){
gridMain.setGravity(Gravity.TOP);
btnUp.setVisibility(View.GONE);
}
}
}
您可以使用按钮启动向上移动\u click()
功能。
在该函数中,首先需要GridView的LayoutParams
,然后初始化GridView本身。
这不是正确的顺序
要解决这个问题,可以移动gridMain=findviewbyd(R.id.abslistview\u main)
oncreate函数或LinearLayout.LayoutParams params=(LinearLayout.LayoutParams)gridMain.getLayoutParams()之前代码>。
-您在创建方法中也犯了一个错误
absListView = findViewById(R.id.abslistview_main);
将此行与一起删除
gridMain = findViewById(R.id.abslistview_main);