【问题标题】:how to get TextViews from .xml to Java file如何将 TextViews 从 .xml 获取到 Java 文件
【发布时间】:2018-02-04 17:06:23
【问题描述】:
 <TableRow
            android:id="@+id/Row3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center">

            <TextView
                android:id="@+id/cell31"
                android:layout_height="fill_parent"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:gravity="center"
                android:textSize="50sp"
                android:textStyle="bold"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:background="@drawable/back"
                android:onClick="cellClick"
                android:clickable="true"/>
            <TextView
                android:id="@+id/cell32"
                android:layout_height="fill_parent"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:gravity="center"
                android:textSize="50sp"
                android:textStyle="bold"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:background="@drawable/back"
                android:onClick="cellClick"
                android:clickable="true"/>
    .... this is 5x5 row column table. with 25 cells in it.

我的 .xml 文件如下所示。我在 LinearLayout 中有一堆行,其中包含 TableLayouts,其中包含 TextViews 作为单元格。我正在和他们一起做一个基本的游戏。 我正在尝试将 .xml 中的每个单元格分配给 .java 文件中的 TextView 数组。但我不知道怎么做。我需要根据我制作的一些算法更改每个单元格的颜色,所以我想访问单元格。

private TextView colorBoard[][];
this is my .java array.

我可以检查它们是否被点击

public void cellClick(View v) {
        TextView cell = (TextView) findViewById(v.getId());
 switch (cell.getId()) {

                case R.id.cell11:
                    xloc = 0;
                    break;
                case R.id.cell12:
                    xloc = 1;
                    break ;
                   ...rest of cells

但我只能指定当前单击的单元格。在我的游戏中,单元格的颜色变化不同。不是你刚刚点击的那个。假设您点击 1x3 和 4x4 可能会改变颜色。

我是 android 新手,这是我的第一个项目,如果我遗漏了一些基本的东西,非常抱歉。

【问题讨论】:

    标签: java android xml textview


    【解决方案1】:

    我认为你应该使用 ListView 而不是 TextView。在 ListView 中,您可以使用数组将这些东西分配到您想使用它们的任何位置。

    您可以像这样创建布局文件:

    <ListView>
      android:weight="match_parent"
      android:height="match_parent"
      android:id="+id/lst_view"
    </ListView>
    

    您的 Java 代码如下所示

     String[] array={"stack","queue","arraylist"};
        ListView lst;
        //In onCreate function
        lst=(ListView)findViewById(R.id.lst_view);
         ArrayAdapter<String> adpt=new ArrayAdapter<String>(this,R.layout.what_ever_your_xml,array);
        lst.setAdapter(adpt);
    
      //function of listview 
      //arrayadapter is used for converting string type array into listview
    
           lst.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                        String s;
    
                        s=((TextView)view).getText().toString();
                        Toast.makeText(getApplicationContext(), s,Toast.LENGTH_LONG).show();
                    }
                });
    

    【讨论】:

      【解决方案2】:

      如果你想给 TextView 数组赋值。 然后在 setContentView 之后的 oncreate 方法中这样做

        colorBoard[0][0] = (TextView) findViewById(R.id.cell11); 
       colorBoard[0][1] = (TextView) findViewById(R.id.cell12); 
      

      您可以使用 findviewbyId 将 TextView 从 xml 获取到 Java。

      假设如果你想在点击 cell11 时访问 cell44,那么你可以做这样的事情。

      public void cellClick(View v) {
              TextView cell = (TextView) findViewById(v.getId());
       switch (cell.getId()) {
      
                      case R.id.cell11:
                          xloc = 0;
                          colorBoard[0][0].setBackground()//As you wish
                          break;
                      case R.id.cell12:
                          xloc = 1;
                          break ;
                         ...rest of cells
      

      一旦您可以访问 cell44,您就可以为其设置背景颜色或任何其他属性。

      【讨论】:

      • 这不是我的意思。它是随机分配的,所以我必须控制所有。我的意思是第一次点击 cell11 可能意味着 cell 44,但另一次它也可能意味着 cell23。
      • 你需要填充 colorBoard[][] 吗?
      • 不一定。但我必须能够访问我想要的任何单元格并更改它的颜色。没有点击它。我的意思是我可以用 ViewID 填充它,但不是代码重复。有没有更好的办法?我不坚持在 XML 上创建 TextViews(单元格),但我不太确定如何以编程方式制作它们
      • 能否请您查看我更新的答案。您可以随时更改颜色,甚至无需点击,因为您可以访问每个单独的 TextView。
      • 我检查了你的答案,并在请检查之前回复了我的答案。
      猜你喜欢
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多