2017-05-27 63 views
-1

我仍然是Android Studio的新手,在对其余的代码进行编码之前,我还有一个任务要做在我的第一个线性代数相关项目上。 任务是将EditText的每个值都放入EditTexts的矩阵中,并将它们存储到int [] []矩阵中。如何从GridView或GridLayout的每个EditText获取每个值?

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

下面是我想要做的表示:

比方说用户想用的2x3矩阵计算

enter image description here

该应用程序将随后显示的2×3矩阵空EditTexts:

enter image description here

而且用户输入任何数字ŧ当他们点击“下一个矩阵”按钮时,我想从每个EditText中获取数字,并将它们放到一个int [] []矩阵中,以便可以将其转移到另一个矩阵活动。

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

再说一遍,为了放置EditTexts的矩阵,哪个Grid更好用? GridView或GridLayout?我如何从他们获取每个EditTexts的值?

回答

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(); 
     } 
    } 
} 

希望它可以帮助

+0

是“第i个孩子在ViewGroup中有一行?换句话说,孩子们是矩阵的行吗? –

+0

不可以。我们正在线性获取每个孩子。我ViewGroup中的第一个孩子从第一排开始,到最后一排线性穿过 – Kannan

+0

好吧我在调试时遇到了一些问题。 'String matrix_value = gridChild.getChildAt(k).getText()。toString();'产生一个错误,所以我把它改成了'EditText element =(EditText)gridChild.getChildAt(k); matrix_value = element.getText()。toString();'但是当我调试它时,它不能识别'matrix_value'的值。另外,由于我们正在线性地迭代每个孩子,所以我运行了一个3x3矩阵的调试器,我期望'childSize'是3,但它保持为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()); 
      } 
     } 
    } 
} 
+0

我为'rv.setLayoutManager新的GridLayoutManager(上下文,COLUMN_COUNT,GridLayoutManager.VERTICAL,false)); ?另外,'YourCustomAdapter()'是'setAdapter()'方法的一个子类吗? –

+0

首先,如果你正在使用一个片段,'context'将会是你的'Activity'(它扩展'Context')或'Fragment#getContext()'。其次,(对不起,我忽略了超类),yourCustomAdapter应该扩展'RecyclerView.Adapter' – Yuta