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

时间:2017-05-27 01:47:45

标签: android xml android-studio matrix gridview

我仍然是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的值?

2 个答案:

答案 0 :(得分:0)

我认为你在显示矩阵网格上的问题已经解决了。您现在可能需要获取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();
        }
    }
}

希望有所帮助

答案 1 :(得分:0)

您可以将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());
            }
        }
    }
}