如何从GridView或GridLayout中获取每个EditText中的每个值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从GridView或GridLayout中获取每个EditText中的每个值?相关的知识,希望对你有一定的参考价值。
我仍然是android Studio的新手,我还有一个任务要做我的第一个与线性代数相关的项目,然后我才能熟悉其余的编码。任务是在EditTexts矩阵中获取EditText的每个值,并将它们存储到int [] []矩阵中。
现在我真的坚持了几个小时,主要原因是因为我不知道如何使用GridView和GridLayout。我也不知道哪一个更适合这个。
下面是我正在尝试做的事情的代表:
假设用户想用2x3矩阵计算
然后,应用程序将显示一个空的EditTexts的2x3矩阵:
并且用户在空的EditTexts 中输入了他们想要的任何数字
当他们点击“下一个矩阵”按钮时,我想从每个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();
}
}
}
希望能帮助到你
您可以使用RecyclerView
和GridLayoutManager
来实现它。
尝试如下:
但是我不确定最后一个方法的逻辑(在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 或 ListView 获取实例化的委托组件
如何从QML中的GridView或ListView获取实例化的委托组件
Gridview v7 对旧 api android.support.v7.widget.Gridlayout 的支持未能实例化