【问题标题】:How to get the value of each EditText from an adapter from GridView?如何从 GridView 的适配器获取每个 EditText 的值?
【发布时间】:2017-05-26 20:41:47
【问题描述】:

我正在开发一个矩阵计算器应用程序,但我无法弄清楚如何获取 GridView 中每个 EditText 的值。我需要获取这些值以便将它们放入另一个矩阵并计算它。

如果用户想要使用 3x2 矩阵,这是 GridView 的外观。这是一个包含六个 EditText 的 GridView,因为 3*2=6

这是上面那张图片的 XML:

<RelativeLayout
    android:layout_width="368dp"
    android:layout_height="495dp"
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp">

    <TextView
        android:id="@+id/textView10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="15dp"
        android:layout_marginStart="15dp"
        android:text="Please input the numbers on both matrices." />

    <TextView
        android:id="@+id/textView11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView10"
        android:layout_alignStart="@+id/textView10"
        android:layout_below="@+id/textView10"
        android:layout_marginTop="21dp"
        android:text="Matrix1: "
        android:textStyle="bold" />

    <GridView
        android:id="@+id/grid"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_alignLeft="@+id/textView11"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignStart="@+id/textView11"
        android:layout_below="@+id/textView11" />

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Please fill in all of the fields"
        android:textColor="#FF0000"
        android:visibility="invisible"
        android:layout_below="@+id/grid"
        android:layout_alignLeft="@+id/grid"
        android:layout_alignStart="@+id/grid"
        android:layout_marginTop="15dp" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView8"
        android:layout_alignStart="@+id/textView8"
        android:layout_below="@+id/textView8"
        android:layout_marginTop="11dp"
        android:onClick="setEmptyToZero"
        android:text="Set Empy Fields to Zero" />

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/button4"
        android:layout_marginLeft="28dp"
        android:layout_marginStart="28dp"
        android:layout_toEndOf="@+id/button4"
        android:layout_toRightOf="@+id/button4"
        android:onClick="nextMatrix"
        android:text="Next Matrix" />

</RelativeLayout>

这是 GridView 项的 XML。我不知道如何从中获取值:

<EditText
    android:id="@+id/editText3"
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:ems="10"
    android:inputType="numberDecimal" />

这是 GridView 的 MatrixAdapter:

public class MatrixAdapter extends BaseAdapter {
    Context context;
    List<Matrix> matrixList;

    //Or create an int[rows][columns] CHANGE INTO THAT LATER
    public MatrixAdapter(Context context, List<Matrix> matrixList) {
        this.context = context;
        this.matrixList = matrixList;
    }

    @Override
    public int getCount() {

        return matrixList.size();
    }

    @Override
    public Object getItem(int i) {

        return matrixList.get(i);
    }

    @Override
    public long getItemId(int i) {

        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v=View.inflate(context,R.layout.grid_item,null);
        return v;
    }
} 

还有 Matrix 类:

public class Matrix {
    public int i;
    public int j;
    public Matrix(int i, int j)
    {
        this.i = i;
        this.j = j;
    }
}

最后,这是我要从 GridView 中的每个 EditText 获取值的 Java 代码,但我不知道该怎么做:

private MatrixAdapter adapter;
private List<Matrix> matrixList;
private int rows;
private int columns;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_subtract_matrix_input);

    // GET THE MATRIX DIMENSIONS FOR BOTH MATRICES
    Bundle extras = getIntent().getExtras();
    rows = extras.getInt("rows");
    columns = extras.getInt("columns");

    //MATRIX 1 INPUT

    // INITIALISE THE GRID
    GridView grid=(GridView)findViewById(R.id.grid);
    grid.setNumColumns(columns);

    // CREATE A LIST OF MATRIX OBJECTS
    //Or create an EditText[rows][columns] CHANGE INTO THAT LATER
    //Matrix[][] matrix1 = new Matrix[rows][columns];
    matrixList = new ArrayList<>(); //THIS IS ONLY FOR THE MATRIX OF EDIT_TEXTS
    //Getting the matrix values will come from the user input

    // ADD SOME CONTENTS TO EACH ITEM
    for (int i=0;i<rows;i++)
    {
        for (int j=0;j<columns;j++)
        {
            matrixList.add(new Matrix(i,j));
        }
    }

    // CREATE AN ADAPTER  (MATRIX ADAPTER)
    adapter = new MatrixAdapter(getApplicationContext(),matrixList);

    // ATTACH THE ADAPTER TO GRID
    grid.setAdapter(adapter);

}

public void nextMatrix(View view) //The button goes to the next matrix
{
    //It collects what the user inputted too
    //Checks if one of the fields are empty
    //But how to get the values from each EditText?

}

public void setEmptyToZero(View view) //Fills the empty text boxes to zero
{
    //how to make the program add zeros to the text fields?
    //iterate through the textField matrix first. If an empty field is
    //found, add zero to it

    EditText textField;
    boolean fieldIsEmpty;
    for (int i=0;i<rows;i++)
    {
        for (int j=0;j<columns;j++)
        {
            //How to get values from the EditText Matrix?
        }
    }
}

【问题讨论】:

    标签: java android gridview


    【解决方案1】:

    希望这段代码对你有帮助,

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.R.layout.grid_item, parent, false);
        viewHolder = new ViewHolder(convertView);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    
    Item currentItem = (Item) getItem(position);
    viewHolder.itemName.setText(currentItem.getItemName());  // if already in your  list:
    
    return convertView;
    

    }

    私有类 ViewHolder { EditText itemName;

    public ViewHolder(View view) {
        itemName = (EditText)view.findViewById(R.id.editText3);
        itemname.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
               String text = itemName..getText().toString();
    
        }
      }); 
    }
    

    }

    【讨论】:

    • 如果我使用这个,是否意味着我可以通过getView方法从EditText中获取一个值?
    • 在此代码中,您将在 viewHolder 的 onClick 方法中获取 edittext 的值。
    【解决方案2】:

    您可以创建一个 Arraylist 来存储值并随心所欲地使用。要获取编辑文本的值并将每个项目存储在数组列表中,请在编辑文本中使用“TextChangeListener()”。

    查看此链接:

    How to use the TextWatcher class in Android?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多