返回gridview里选中的Button上面的文字到外面的TextView
public class Gridview2Adapter extends BaseAdapter {
public Gridview2Adapter(Context context,List<String> list)
{
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 20;//按钮的个数
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int position, View convertview, ViewGroup arg2) {
convertview=inflater.inflate(R.layout.gridview2_item, null);
g2_btn=(Button) convertview.findViewById(R.id.g2_btn);
//List<String> band=setChannel_band();
//给每一个button设置监听事件,即是让textview的内容显示为点击的按钮上的text作为频道
String str=(String)g2_btn.getText();
channel.setText(str);
return convertview;
}
}
public class MainActivity extends Activity {
GridView gridview2;
TextView channel;
List<String> channel_band=new ArrayList<String>();
//设置按钮默认的文字
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridview2=(GridView)findViewById(R.id.gridview2);
gridview2.setAdapter(new Gridview2Adapter(this,channel_band));
channel=(TextView) findViewById(R.id.channel);
for(int j=0;j<19;j++){
channel_band.add("频道"+j);
}
gridview2.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
for(int i = 0;i<channel_band.size();i++){
if(position == i){
channel_band.get(i).setSelect(true);
}else{
channel_band.get(i).setSelect(false);
}
}
mAdapter.choiceState(position);
Toast.makeText(MainActivity.this, position+"被点击", Toast.LENGTH_SHORT).show();
}
});
}
越想越乱,不知道怎么写了
目标:
返回gridview里选中的Button上面的文字到外面的TextView,
1,设置gridview的item点击事件监听,点击时,根据点击的position,可以获取到对应的实体类
2,拿到实体类后就可以获取到实体类的名称,也就是Button上面显示的文字。
现在的问题:
1,Adapter的理解有误,
①Adapter构造器中没有处理list对象
②getCount() ,常用的方式是通过构造器获取到list对象,然后返回list对象的size(),后续list对象数量发生变化也可以相对应,同时
也和下面的getItem()中的参数相对应的去获取到该position的list的对象。
③getView()里面,你需要做的是将list的数据,通过position的处理流程,一个一个的将list中的数据(称之为item)给设置到button上,所以应该是
Button.setText(item.getButtonText())这样的形式去处理。其他方式也可以用,对于新手来讲就先这样就好了。
2,gridview的OnItemClickListener理解有误,
OnItemClickListener的回调时机是在gridview的itemView(也可以理解为Adapter的getView()返回的那个View)点击时回调的,同时
也会伴随position的参数传入,拿到position,就等于是拿到了点击的itemView对应的数据item,也就是list中对应的position的那个
数据源,你可以通过外面的list.get(position)获取到item,也可以通过adapter的getItem()获取到item,它们是同一个对象,只不过
取的方式不一样。拿到item之后,就可以通过TextView直接调用setText(item.getButtonText())的方式将button上的同一个地方的数据
取到并显示了。
所以最终的解决代码为:
public class Gridview2Adapter extends BaseAdapter {
private List list;
public Gridview2Adapter(Context context,List list){
this. list=list;
}
@Override
public int getCount() {
return list.size();//按钮的个数
}
@Override
public Object getItem(int arg0) {
return list.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int position, View convertview, ViewGroup arg2) {
//初始化View
convertview=inflater.inflate(R.layout.gridview2_item, null);
g2_btn=(Button) convertview.findViewById(R.id.g2_btn);
//处理数据
String item=list.get(position);//或者String item=(String)getItem(position);
g2_btn.setText(item);
return convertview;
}
}
public class MainActivity extends Activity {
GridView gridview2;
TextView channel;
List channel_band=new ArrayList();
//设置按钮默认的文字
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
channel=(TextView) findViewById(R.id.channel);
//初始化GridView
gridview2=(GridView)findViewById(R.id.gridview2);
gridview2.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String item=channel_band.get(position);
channel.setText(item);
Toast.makeText(item +"被点击", Toast.LENGTH_SHORT).show();
}
});
//初始化数据源
for(int j=0;j<19;j++){
channel_band.add("频道"+j);
}
//设置adapter
gridview2.setAdapter(new Gridview2Adapter(this.channel_band));
}
}
不清楚你这个button的数据是哪里来的,我假设你button的数据是从 channel_band里面取的。
第一种:gridview2.setOnItemClickListener的onItemClick 添加 channel.setText(channel_band.get(position))
第二种:在Gridview2Adapter构造函数中直接把TextView对象传入
public class Gridview2Adapter extends BaseAdapter {
private TextView channel;
public Gridview2Adapter(Context context,List<String> list,TextView textview)
{
this.channel = textview;
}
//然后设置button的点击事件
g2_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
channl.setText(g2_btn.getText().toString());
}
});
第三种: 使用回调函数去做。