【问题标题】:How to inflate a gridview within a listview in android?如何在android的listview中膨胀gridview?
【发布时间】:2012-10-20 16:32:26
【问题描述】:

所以我意识到我不能将其他元素放入一个 android gridview 并且我不能将 gridview 放入一个滚动视图中,所以我尝试将一个 gridview 粘贴到一个只有 1 个 listview 列的 android listview 中,看看我是否可以做到这一点,这是成功的,但是当我尝试膨胀列表中的 gridview 时,我不断收到一个 nullpointerexception,我在其中设置了实际的网格适配器,还有其他方法可以解决这个问题吗?

package com.listtest.testit;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;

public class ListTestActivity extends Activity {

ViewGroup footer;
LayoutInflater inflater;
List<String> theStrings = new ArrayList<String>();
ListAdapter adapter;
ListView list;
GridView grid;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    theStrings.add("");

    String[] numbers = new String[] { 
            "A", "B", "C", "D", "E",
            "F", "G", "H", "I", "J",
            "K", "L", "M", "N", "O",
            "P", "Q", "R", "S", "T",
            "U", "V", "W", "X", "Y", "Z"};

    list = (ListView) findViewById(R.id.list);

    inflater = getLayoutInflater();
    footer = (ViewGroup) inflater.inflate(R.layout.footer, list, false);
    list.addFooterView(footer, null, false);

    adapter = new ListAdapter(this, theStrings);
    list.setAdapter(adapter);

    ArrayAdapter<String> gridAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, numbers);

    grid.setAdapter(gridAdapter);

    list.setOnScrollListener(new OnScrollListener() {
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // Do nothing
        }

        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {

            final int lastItem = firstVisibleItem + visibleItemCount;

            // threshold being indicator if bottom of list is hit
            if (lastItem == totalItemCount) {

                //addMoreToArray();
                //adapter.notifyDataSetChanged();
            }
        }
    });
}

public class ListAdapter extends BaseAdapter {

    private Activity activity;
    private List<String> data;
    private LayoutInflater inflater=null;


    public ListAdapter(Activity a, List<String> theStrings) {
        activity = a;
        data=theStrings;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.item, null);

        grid=(GridView)vi.findViewById(R.id.gridView1);

        return vi;
    }
}

private void addMoreToArray() {

    theStrings.add("");

}

}

【问题讨论】:

  • 这很有趣,但我很想知道您为什么要将网格视图放在列表视图中?
  • 我想在 gridview 和页脚中添加页眉,但这不能用我看到的 gridview 来完成,所以我试图做一个解决方法,我注意到许多应用程序,例如 instagram已经找到了一种方法来做到这一点,但这是我能想到的最接近的方法
  • 你应该这样做。如果你想在列表视图中创建一个网格,你应该使用类似 GridLayout 的东西。始终避免嵌套可滚动容器
  • @toadzky 问题是如果你把它放在一个线性布局中,整个屏幕不会滚动,你会得到一个视图的半页,然后 gridview 占据另一半,如果你使用 instagram例如,您会注意到在配置文件页面上,此屏幕上的所有视图都滚动,包括网格视图,类似于将内容放入滚动视图中获得的效果
  • 您当然将线性布局包装在滚动视图中。 scrollviews 只接受一个孩子,这通常是一个线性布局,填充实际内容。

标签: java android android-listview nullpointerexception android-gridview


【解决方案1】:

It 说你正在尝试的不是好方法,尽管他介绍了他如何在列表视图中管理网格视图。

这里是这样说的...... 这里的问题是,GridView 和 ListView 本身都是可滚动的,将可滚动容器嵌入到另一个可滚动容器中并不是一个好方法。


Google 的电子市场应用和 Google 音乐应用仅使用列表视图。没有滚动视图!(我检查了层次结构视图)。仅使用列表视图会有点麻烦。因为 getView() 会更复杂。但它确实如你所愿(我终于通过这种方式成功了)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多