Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.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中的CustomAdapter获取arraylist引用?_Java_Android - Fatal编程技术网

Java 如何从android中的CustomAdapter获取arraylist引用?

Java 如何从android中的CustomAdapter获取arraylist引用?,java,android,Java,Android,我制作了一个GridView,使用CustomAdapter以编程方式组织TextView和编辑视图,如表。在getView()override方法中,我创建视图,将其添加到arrayList中,并让抽象完成它的工作。当我试图访问adapter类之外的视图(在本例中为OnCreate活动)时,问题就出现了。我试图通过getItems()方法获取数组,该方法返回视图的arrayList。但它返回的是空数组(我使用打印0的日志进行检查)。我想知道为什么会这样?也许getView()方法只有在我尝试在

我制作了一个GridView,使用CustomAdapter以编程方式组织TextView和编辑视图,如表。在getView()override方法中,我创建视图,将其添加到arrayList中,并让抽象完成它的工作。当我试图访问adapter类之外的视图(在本例中为OnCreate活动)时,问题就出现了。我试图通过getItems()方法获取数组,该方法返回视图的arrayList。但它返回的是空数组(我使用打印0的日志进行检查)。我想知道为什么会这样?也许getView()方法只有在我尝试在onCreate中获取数组之后才会运行,但不知何故,onCreate在适配器完全准备就绪之前就完成了? 如果是这样的话,我应该在哪里/什么时候获得视图? 下面是我的活动和适配器类:

 public class MatrizMultiplicationActivity extends AppCompatActivity {
    MatrizGridAdapter gridAdapter;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_matriz_mult);
        GridView gridView = (GridView) findViewById(R.id.grid_view);
        gridView.setNumColumns(5);
        gridAdapter = new MatrizGridAdapter(this,5,5);
        gridView.setAdapter(gridAdapter);
        ArrayList<EditText> matrix = gridAdapter.getItems();
        Log.d("mSize", String.valueOf(matrix.size()));
    }
    public class MatrizGridAdapter extends BaseAdapter {
        Context ctx;
        int rows;
        int coluns;
        int size;
        ArrayList<EditText> views;

        public MatrizGridAdapter(Context ctx, int rows, int coluns)
        {
            this.ctx = ctx;
            this.rows=  rows;
            this.coluns = coluns;
            this.size = rows*coluns;
            this.views = new ArrayList<EditText>();
        }

       // .. some methods

        public ArrayList<EditText> getItems()
        {
            return views;
        }
        @Override
        public int getCount() {
            return size;
        }

        @Override
        public EditText getItem(int position) {
            if((views.size()<position))
            {
                return views.get(position);
            }
            return null;
        }

        @SuppressLint("ResourceAsColor")
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if(convertView==null)
            {
                CardView cardview = new CardView(ctx);
               //code for setting CardView attributes
               //...
               //..
               //layout logic, doesn't really matter
                if(position==0)
                {
                    TextView textView = new TextView(ctx);
                   //code for setting textView attributes
                    cardview.addView(textView);
                    cardview.setBackgroundColor(R.color.cinzarrom);

                }
                //layout logic, doesn't really matter
                //it is the first row, so put the numbers of coluns above
                else if(position<coluns)
                {
                   //code for setting textView attributes
                   //...
                   //..
                    cardview.addView(textView);
                    cardview.setBackgroundColor(R.color.cinzarrom);
                    setMarginLeft(textView, MyMath.convertDpToPixels(20,ctx));
                }
                //it is the first colun in any row, so put the number of rows on the left
                else if(position%coluns==0)
                {
                   //code for setting textView attributes
                    cardview.addView(textView);
                    cardview.setBackgroundColor(R.color.cinzarrom);
                    setMarginLeft(textView, MyMath.convertDpToPixels(20,ctx));
                }
                //ARE THE VIEWS BEING ADDED BEFORE THE CALL TO ARRAY.SIZE?()
                 else {
                    EditText editText = new EditText(ctx);
                    //add it to the array who stores the text views
                    views.add(editText);
                    //code for setting textView attributes
                    cardview.setBackgroundColor(Color.BLUE);
                    cardview.addView(editText);
                }
                return cardview;
            }

            return convertView;
        }
}
公共类MatrizMultiplicationActivity扩展了AppCompatActivity{
MatrizGridAdapter;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u matriz\u mult);
GridView GridView=(GridView)findViewById(R.id.grid\u视图);
gridView.setNumColumns(5);
gridAdapter=新的MatrizGridAdapter(这个,5,5);
setAdapter(gridAdapter);
ArrayList矩阵=gridAdapter.getItems();
Log.d(“mSize”,String.valueOf(matrix.size());
}
公共类MatrizGridAdapter扩展了BaseAdapter{
上下文ctx;
int行;
int coluns;
整数大小;
阵列主义观点;
公共MatrizGridAdapter(上下文ctx、int行、int列)
{
this.ctx=ctx;
这个。行=行;
this.coluns=coluns;
this.size=行*列;
this.views=new ArrayList();
}
//…一些方法
公共阵列列表getItems()
{
回访意见;
}
@凌驾
public int getCount(){
返回大小;
}
@凌驾
公共EditText getItem(int位置){

如果((views.size)()适配器使用一个视图池,一些在屏幕上,一些在屏幕下。这由适配器控制。为什么要使用此getItems方法?它是一个拥有大多数EditText视图的适配器。我希望访问它们,以便在用户插入时可以获取它们的文本,但您不知道哪个EditText是从lis中插入的t?你将无法获得屏幕上滚动的视图。为什么你要使用GridView,听起来你可以使用滚动视图中包装的ListView。你希望使用多少EditText?我希望使用很多视图,事实上,它将由用户指定。我的目的是使MatrixMultiplication有效视图均匀地放置在屏幕上,所以我想通过一些数学运算我可以找到它们。但是我不太了解适配器是如何工作的,这是我第一次使用自定义的。但是就你所说的,我觉得我对它没有太多的控制权。我选择网格只是因为需要将视图放置在行/列格式中,所以我选择了网格我没有想到其他人,因为我还不太了解他们