我仍然是Android Studio的新手,在我第一次完成与线性代数相关的项目之前,我还有一项任务要做,然后才开始编写其余部分。 任务是在EditTexts矩阵中获取EditText的每个值,并将它们存储到int [] []矩阵中。
现在我真的坚持了几个小时,主要原因是因为我不知道如何使用GridView和GridLayout。我也不知道哪一个更适合用于此。
以下是我正在尝试做的事情:
假设用户想用2x3矩阵计算
该应用程序将显示一个空的EditTexts的2x3矩阵:
当他们点击“下一个矩阵”按钮时,我想从每个EditText中获取数字并将它们放入int [] []矩阵中,以便将其传输到另一个Activity。
如果我能做到这一点,我将能够将每个EditText的值打印为TextView。
同样,哪个Grid更适合放置EditTexts矩阵? GridView或GridLayout?如何从中获取每个EditTexts的值?
答案 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)
您可以将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());
}
}
}
}