【问题标题】:Android GridLayout Row indexAndroid GridLayout 行索引
【发布时间】:2012-12-17 16:44:12
【问题描述】:

我有一个类似于下面代码的设计布局,我想为每个复选框编写一个代码,以便在选中时向我显示所选行的索引,但我不知道如何从我的网格布局中动态获取此属性而不是通过在 Toast.makeText() 中手动键入索引。如果您在这个问题上帮助我,我将不胜感激。

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:columnCount="5"
  android:rowCount="4" 
  android:orientation="horizontal" 
  android:background="#FF1354"
  android:id="@+id/Grd">
  <TextView android:text=" R 1, C 1 " 
       android:background="@drawable/border" />

  <TextView 
      android:text=" R 1, C 2 "
       android:background="@drawable/border"/>

  <TextView android:text=" R 1, C 3 "
       android:background="@drawable/border" />

  <TextView android:text=" R 1, C 4 "
      android:background="@drawable/border" />

  <CheckBox 
      android:id="@+id/chk1"
      android:text=""
     style="?android:attr/starStyle"  />

  <TextView android:text=" R 2, C 1 "
      android:background="@drawable/border" />

  <TextView android:text=" R 2, C 2 "
      android:background="@drawable/border" />

  <TextView android:text=" R 2, C 3 "
      android:background="@drawable/border" />

  <TextView android:text=" R 2, C 4 "
       android:background="@drawable/border" />

  <CheckBox
      android:id="@+id/chk2"
       android:text=""
   style="?android:attr/starStyle"  />

  <TextView android:text=" R 3, C 1 "
       android:background="@drawable/border" />
  <TextView android:text=" R 3, C 2 "
      android:background="@drawable/border" />

  <TextView android:text=" R 3, C 3 "
       android:background="@drawable/border" />

  <TextView android:text=" R 3, C 4 " 
      android:background="@drawable/border"/>

  <CheckBox 
      android:id="@+id/chk3"
      android:text=""
       style="?android:attr/starStyle"/>

  <TextView android:text=" R 4, C 1 "
    android:background="@drawable/border" />

  <TextView android:text=" R 4, C 2 "
      android:background="@drawable/border" />

  <TextView android:text=" R 4, C 3 "
       android:background="@drawable/border" />

  <TextView android:text=" R 4, C 4 "
      android:background="@drawable/border" />

  <CheckBox 
      android:id="@+id/chk4"
      android:text=""
      style="?android:attr/starStyle" />

</GridLayout>

这是我的代码:

package com.example.hiiiiiiiiiiiiii;

import com.example.mynewtestoftablecheck.MyNewTestTableCheck;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.CheckBox;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.Toast;

public class Hiiiiiiiiiiiiiiiiiiiiiiii extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hiiiiiiiiiiiiiiiiiiiiiiii);


      CheckBox chk1=(CheckBox)findViewById(R.id.chk1);
      chk1.setOnClickListener(new View.OnClickListener() {
          GridLayout Grd=(GridLayout)findViewById(R.id.Grd);


        @Override
        public void onClick(View arg0) {
            {
                if (((CheckBox) arg0).isChecked()) {
                    Toast.makeText(Hiiiiiiiiiiiiiiiiiiiiiiii.this,
                               "1st Row checked", Toast.LENGTH_LONG).show();
                }
                else
                {
                    Toast.makeText(Hiiiiiiiiiiiiiiiiiiiiiiii.this,
                            "1st Row Unchecked", Toast.LENGTH_LONG).show();
        }
                }

            }
        });



      CheckBox chk2=(CheckBox)findViewById(R.id.chk2);
      CheckBox chk3=(CheckBox)findViewById(R.id.chk3);
      CheckBox chk4=(CheckBox)findViewById(R.id.chk4);



    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_hiiiiiiiiiiiiiiiiiiiiiiii, menu);
        return true;
    }
}

【问题讨论】:

    标签: android checkbox toast grid-layout


    【解决方案1】:

    grid.xml

    <?xml version="1.0" encoding="utf-8"?>
    <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:columnCount="5"
      android:rowCount="4" 
      android:orientation="horizontal" 
      android:background="#FF1354"
      android:id="@+id/Grd">
    </GridLayout>
    

    单独的 item_grid.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/LinearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    
      <TextView android:text=" R 1, C 1 " 
           android:background="@drawable/border" />
    
      <TextView 
          android:text=" R 1, C 2 "
           android:background="@drawable/border"/>
    
      <TextView android:text=" R 1, C 3 "
           android:background="@drawable/border" />
    
      <TextView android:text=" R 1, C 4 "
          android:background="@drawable/border" />
    
      <CheckBox 
          android:id="@+id/chk1"
          android:text=""
         style="?android:attr/starStyle"  />
    
    </LinearLayout>
    

    接下来是自定义 grig 适配器

    public class GridviewAdapter extends BaseAdapter {
    
        private Activity activity;
        ArrayList<HashMap<String, String>> mapList;
    
        public GridviewAdapter(Activity activity,
                ArrayList<HashMap<String, String>> mapList_) {
            super();
            this.mapList = mapList_;
            this.activity = activity;
    
        }
    
        public int getCount() {
            // TODO Auto-generated method stub
            return mapList.size();
        }
    
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }
    
        public static class ViewHolder {
            public ImageView imgViewFlag;
            public TextView txtViewTitle;
        }
    
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder view;
            LayoutInflater inflator = activity.getLayoutInflater();
    
            if (convertView == null) {
                view = new ViewHolder();
                convertView = inflator.inflate(R.layout.item_grid, null);
    
                view.txtViewTitle = (TextView) convertView
                        .findViewById(R.id.myImageViewText);
    
    
    
                convertView.setTag(view);
            } else {
                view = (ViewHolder) convertView.getTag();
            }
    
            view.txtViewTitle.setText("NAME");
    
    
            return convertView;
        }
    

    在你的活动中

    adapter = new GridviewAdapter(this, mapList);
            // Set custom adapter to gridview
            gridView = (GridView) findViewById(R.id.gvMain);
            gridView.setNumColumns(GridviewAdapter.rowCount);
            gridView.setAdapter(adapter);
    
            gridView.setSelector(android.R.color.transparent);
            // gridView.setColumnWidth(GridviewAdapter.returnDisplayMetrics(this));
    
            gridView.setOnItemClickListener(new OnItemClickListener() {
    
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
    
    
    
                }
            });
    

    【讨论】:

    • 谢谢,但我没有任何图像视图!请你解释一下你写的 gridadpater
    • 抱歉,图像视图确实丢失了 :) 我给基本适配器充气... 1 分钟我添加了源
    • 对不起,我在未实现的类或方法或未定义的变量上收到太多错误,如下所示: GridviewAdapter 类型的方法 initializeDisplayMetrics() 未定义
    • 非常感谢,请给我提示解决这最后两个错误 GridviewAdapter 类型必须实现继承的抽象方法 Adapter.getItem(int) myImageViewText 无法解析或不是字段
    猜你喜欢
    • 2015-07-26
    • 2014-06-02
    • 2011-06-08
    • 2018-02-05
    • 2015-08-22
    • 1970-01-01
    • 2014-12-18
    • 2016-10-14
    • 2014-04-20
    相关资源
    最近更新 更多