Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中如何在listview中膨胀gridview?_Java_Android_Android Listview_Nullpointerexception_Android Gridview - Fatal编程技术网

Java 在android中如何在listview中膨胀gridview?

Java 在android中如何在listview中膨胀gridview?,java,android,android-listview,nullpointerexception,android-gridview,Java,Android,Android Listview,Nullpointerexception,Android Gridview,因此我意识到我不能将其他元素放入android gridview,也不能将gridview放入scrollview,因此我尝试将gridview粘贴到只有一列listview的android listview中,以查看我是否可以实现该功能,这是成功的,然而,当我试图膨胀列表中的gridview时,我总是得到一个nullpointerexception,在这里我设置了实际的网格适配器,有没有其他方法可以解决这个问题 package com.listtest.testit; import java

因此我意识到我不能将其他元素放入android gridview,也不能将gridview放入scrollview,因此我尝试将gridview粘贴到只有一列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("");

}

}
package com.listest.testit;
导入java.util.ArrayList;
导入java.util.List;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AbsListView;
导入android.widget.ArrayAdapter;
导入android.widget.BaseAdapter;
导入android.widget.GridView;
导入android.widget.AbsListView.OnScrollListener;
导入android.widget.ListView;
公共类ListTestActivity扩展了活动{
视图组页脚;
充气机;
列出字符串=新的ArrayList();
列表适配器;
列表视图列表;
网格视图网格;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
字符串。添加(“”);
字符串[]编号=新字符串[]{
“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);
充气机=充气机();
页脚=(视图组)充气器。充气(R.layout.footer,list,false);
list.addFooterView(页脚,null,false);
适配器=新列表适配器(此,字符串);
list.setAdapter(适配器);
ArrayAdapter gridAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,数字);
setAdapter(gridAdapter);
setOnScrollListener(新的OnScrollListener(){
公共无效onScrollStateChanged(AbsListView视图,int scrollState){
//无所事事
}
public void onScroll(AbsListView视图,int firstVisibleItem,
int visibleItemCount,int totalItemCount){
final int lastItem=firstVisibleItem+visibleItemCount;
//如果达到列表底部,则阈值为指示器
如果(lastItem==totalItemCount){
//addMoreToArray();
//adapter.notifyDataSetChanged();
}
}
});
}
公共类ListAdapter扩展了BaseAdapter{
私人活动;
私人名单数据;
专用充气机=空;
公共ListAdapter(活动a,列出字符串){
活动=a;
数据=串;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
public int getCount(){
返回data.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null)
vi=充气机充气(R.layout.item,空);
grid=(GridView)vi.findViewById(R.id.gridView1);
返回vi;
}
}
私有void addMoreToArray(){
字符串。添加(“”);
}
}
说您尝试的不是好方法,尽管他介绍了如何在列表视图中管理网格视图

上面写着。。。。 这里的问题是,GridView和ListView本身都是可滚动的,在另一个可滚动容器中嵌入可滚动容器不是一个好方法



谷歌的Market应用程序和谷歌音乐应用程序仅使用列表视图。没有滚动视图!(我使用层次视图进行了检查)。只使用列表视图会有点麻烦。因为getView()会更复杂。但它确实能如你所愿工作得很好(我最终用这种方法成功了)

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