YXTS122
YXTS122
采纳率100%
2019-01-30 17:09 阅读 382

返回gridview里选中的Button上面的文字到外面的TextView

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

  • 已采纳
    csdn635406113 就知道你会选我 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));
    }
    }

    点赞 1 评论 复制链接分享
  • devmiao devmiao 2019-01-30 17:56
  • cjwyc timorwu 2019-01-30 18:58

    不清楚你这个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());
                }
            });
    

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

    点赞 评论 复制链接分享

相关推荐