YXTS122 2019-01-30 17:09 采纳率: 100%
浏览 395
已采纳

返回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条回答 默认 最新

  • 就知道你会选我 2019-01-31 10:43
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题