返回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();
        }
        });



    }


越想越乱,不知道怎么写了

3个回答

目标:
返回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());
            }
        });

第三种: 使用回调函数去做。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!