2011-02-18 31 views
0

如何获取在gridview中点击的android切换按钮的位置?如何获取在gridview中单击的togglebutton的位置?

如果我使用下面的示例代码,我没有得到位置的Toast消息。

public class HelloGridView extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    GridView gridview = (GridView) findViewById(R.id.gridview); 
    gridview.setAdapter(new ToggleButtonAdapter(this)); 

    gridview.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, 
       long id) { 
      Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show(); 
     } 

    }); 
} 

}

与肘适配器:

public class ToggleButtonAdapter extends BaseAdapter { 
private Context mContext; 

public ToggleButtonAdapter(Context c) { 
    mContext = c; 
} 

@Override 
public int getCount() { 
    return 5; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view; 
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (convertView == null) { // reuse it if it already exists 
     view = (View) inflater.inflate(R.layout.items, null); 

    } else { 
     view = (View) convertView; 
    } 

    ToggleButton toggleButton = (ToggleButton) view.findViewById(R.id.toggleButton1); 
    TextView textView = (TextView) view.findViewById(R.id.textView1); 
    textView.setText("Toggle Button " + position); 

    /*toggleButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      ToggleButton t = (ToggleButton) v.findViewById(R.id.toggleButton1); 

      Toast.makeText(mContext, Boolean.toString(t.isChecked()), Toast.LENGTH_SHORT).show(); 
     } 
    });*/ 
    return view; 
} 

}

取消对拨动听者的那部分玩,告诉我怎么去的位置。是否有一种方法可以在构建网格视图时将一些数据注入切换按钮,以便以后参考?我无法找到阅读ToggleButton javadoc的方法。

非常感谢!

编辑:

糟糕!这里的布局:

main.xml中

<GridView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:columnWidth="90dp" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
    > 



</GridView> 

items.xml: AdapterView.ContextMenuInfo信息=(适配器视图:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal"> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical"> 

     <TextView 
      android:text="Some label" 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp"/> 

     <ToggleButton 
      android:id="@+id/toggleButton1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_margin="10dp"/> 
    </LinearLayout> 
</LinearLayout> 

回答

3

在getView方法,定义 final int pos = position;

,并在onClickListener,

toggleButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ToggleButton t = (ToggleButton) v.findViewById(R.id.toggleButton1); 
      Toast.makeText(mContext, Boolean.toString(t.isChecked()) + " : " + String.valueOf(pos), Toast.LENGTH_SHORT).show(); 
     } 
    }); 

工作得很好,我检查:)

这样做是因为,在OnClickListener我们在getView创建方法是本地类,它保留它访问外部类的变量的本地副本(这是我们需要将pos声明为final的原因)。该类的一个实例附加了从该方法返回的切换按钮,并且其生命周期与切换按钮的生命周期相关联。

更多本地类here

0

您好杰森 你可以在点击方法试试这个.ContextMenInfo)view.getMenuInfo();

int position = info.position;

+0

位置作为参数传递给getView功能已经过去了。 'info.position`不会返回相同的东西吗? – basilisk 2011-02-18 03:31:20

+0

如果你是对的,杰森问如何获得onClick方法的位置。 info.position只是getView方法中的参数位置 – 2011-02-18 03:36:17

相关问题