【问题标题】:GridView gravity won't changeGridView 重力不会改变
【发布时间】:2018-03-11 17:36:00
【问题描述】:

每当我单击按钮时,我都会尝试更改 GridView 的重力,但应用程序在部署时会崩溃。我不确定为什么在 XML 布局中声明了 GridView 时会发生这种情况。

尝试在空对象引用上调用虚拟方法 'android.view.ViewGroup$LayoutParams android.widget.GridView.getLayoutParams()'

sw600dp/activity_main.xml

<?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 {

    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);
        }
    }
}

【问题讨论】:

    标签: android xml android-layout gridview layoutparams


    【解决方案1】:

    您有触发moveup_click() 函数的按钮。 在该函数中,您首先需要 GridView 的 LayoutParams,然后初始化 gridview 本身。 这不是正确的顺序。

    要解决它,您可以移动gridMain = findViewById(R.id.abslistview_main);oncreate 函数或在LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) gridMain.getLayoutParams(); 之前。 -

    【讨论】:

      【解决方案2】:

      你的create方法也搞错了

      absListView = findViewById(R.id.abslistview_main); 
      

      删除这一行

      gridMain = findViewById(R.id.abslistview_main);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多