如何从GridView或GridLayout中获取每个EditText中的每个值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从GridView或GridLayout中获取每个EditText中的每个值?相关的知识,希望对你有一定的参考价值。

我仍然是android Studio的新手,我还有一个任务要做我的第一个与线性代数相关的项目,然后我才能熟悉其余的编码。任务是在EditTexts矩阵中获取EditText的每个值,并将它们存储到int [] []矩阵中。

现在我真的坚持了几个小时,主要原因是因为我不知道如何使用GridView和GridLayout。我也不知道哪一个更适合这个。

下面是我正在尝试做的事情的代表:

假设用户想用2x3矩阵计算

enter image description here

然后,应用程序将显示一个空的EditTexts的2x3矩阵:

enter image description here

并且用户在空的EditTexts enter image description here中输入了他们想要的任何数字

当他们点击“下一个矩阵”按钮时,我想从每个EditText中获取数字并将它们放入int [] []矩阵中,以便将其传输到另一个Activity。

如果我能做到这一点,我将能够将每个EditText的值打印为TextView。

再次,哪个Grid更适合放置EditTexts矩阵? GridView或GridLayout?如何从中获取每个EditTexts的值?

答案

我认为你在显示矩阵网格上的问题已经解决了。您可能需要立即获取Matrix内容。试试这个

// SETUP YOUR GRIDVIEW
GridView mGridView = (GridView)findViewById(R.id.grid);
// COUNT TOTAL CHILDS IN IT
int gridchilds = mGridView.getChildCount();
// ITERATE THROUGH EACH CHILDS
for(int i = 0; i < gridchilds; i++) 
{
    // SELECT 'i' th CHILD IN A VIEWGROUP
    ViewGroup gridChild = (ViewGroup) mGridView.getChildAt(i);
    // GET THE CHILDREN SIZE OF THAT 'i' th CHILD
    int childSize = gridChild.getChildCount();
    // ITERATE THOUGH EACH
    for(int k = 0; k < childSize; k++) 
    {
        // CHECK IF IT IS AN 'EditText'
        if( gridChild.getChildAt(k) instanceof EditText)
        {
            // GET THE MATRIX VALUE AT THAT CELL
            String matrix_value=gridChild.getChildAt(k)).getText().toString();
        }
    }
}

希望能帮助到你

另一答案

您可以使用RecyclerViewGridLayoutManager来实现它。

尝试如下:

但是我不确定最后一个方法的逻辑(在getValues()中)是否正确。你可能需要调整一下。

(看起来你比我更熟悉数学,所以我把它留给你;))

希望它能奏效

RecyclerView rv = (RecyclerView) findViewById(your_recycler_view_id);
rv.setLayoutManager(new GridLayoutManager(context, CULOMN_COUNT, GridLayoutManager.VERTICAL, false));
rv.setAdapter(new YourCustomAdapter());

class YourCustomAdapter() {
    EditText[][] editTexts = new EditText[COLUMN_COUNT][ROW_COUNT];

    public YourCustomAdapter() {
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(your_edit_text_layout, parent, false);
        return new YourViewHolder(view, listener);
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder h, int position) {
        YourViewHolder holder = (YourViewHolder) h;
        editTexts[position / COLUMN_COUNT][position % COLUMN_COUNT] = holder.editText;
    }

    @Override
    public int getItemCount() {
        return COLUMN_COUNT * ROW_COUNT;
    }

    private class YourViewHolder extends RecyclerView.ViewHolder {
        EditText editText;
        private YourViewHolder() {
            super(itemView);
            this.editText = itemView.findViewById(your_edit_text_id);
        }
    }

    public int[][] getValues() {
        int [][] values = new int[ROW_COUNT][CULLOMN_COUNT];

        for(int i = 0; i < ROW_COUNT; i ++) {
            for(int j = 0; j < CULLOMN_COUNT; j ++) {
                values[i][j] = 
                Integer.parseInt(editTexts[i][j].getText().toString());
            }
        }
    }
}

以上是关于如何从GridView或GridLayout中获取每个EditText中的每个值?的主要内容,如果未能解决你的问题,请参考以下文章

GridLayout(不是GridView)如何均匀地拉伸所有孩子

QML - 如何适应和对齐 GridView 的项目?

如何从 QML 中的 GridView 或 ListView 获取实例化的委托组件

GridLayout和GridView的区别

如何从QML中的GridView或ListView获取实例化的委托组件

Gridview v7 对旧 api android.support.v7.widget.Gridlayout 的支持未能实例化