无论点击哪个按钮,都显示"频道0"

YXTS122 2019-01-31 05:28:34
public class Gridview2Adapter extends BaseAdapter {
Context context;
TextView tv;
private List list;
public Gridview2Adapter(Context context,List<String> list,TextView textview){
this.context=context;
this. list=list;
tv=textview;
}
@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

Button bt;
if (convertview==null)
{
convertview=new Button(context);
convertview.setLayoutParams(new GridView.LayoutParams(100,100));
//convertview.setPadding(4, 4, 4, 4);
}
bt=(Button)convertview;

//处理数据String item=list.get(position);
String item=(String)getItem(position);
bt.setText(item);
bt.setOnClickListener(new OnClickListener(){
public void onClick(View v)
{
Toast.makeText(context,"按钮被按了", Toast.LENGTH_LONG).show();
//tv.setText(item);
}
});
tv.setText(item);

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);
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(MainActivity.this,item +"被点击", Toast.LENGTH_SHORT).show();
}
});
//初始化数据源
for(int j=0;j<19;j++){
channel_band.add("频道"+j);
}
//设置adapter
gridview2.setAdapter(new Gridview2Adapter(this,channel_band,channel));
gridview2.setNumColumns(5);

}
}


...全文
207 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
YXTS122 2019-02-01
  • 打赏
  • 举报
回复
引用 10 楼 m-oj 的回复:
[quote=引用 7 楼 YXTS122 的回复:]
tv.setText(item);就是因为把这句话放在按钮的点击事件onClick()里编译不通过,所以才不知道怎么办才好


你定义个常量就好了啊
final a = tv;
bt.setOnClickListener(new OnClickListener(){
public void onClick(View v)
{
Toast.makeText(context,"按钮被按了", Toast.LENGTH_LONG).show();
a.setText(item);
}
});
[/quote]

应该这样改:
public View getView(int position, View convertview, ViewGroup arg2) {
//初始化View
Button bt;
if (convertview==null)
{
convertview=new Button(context);
convertview.setLayoutParams(new GridView.LayoutParams(100,100));
//convertview.setPadding(4, 4, 4, 4);
}
bt=(Button)convertview;

//处理数据String item=list.get(position);
final String item=(String)getItem(position);
bt.setText(item);
bt.setOnClickListener(new OnClickListener(){
public void onClick(View v)
{
Toast.makeText(context,"按钮被按了", Toast.LENGTH_SHORT).show();
tv.setText(item);

}
});
//tv.setText(item);

return convertview;
}
m-oj 应用层 2019-02-01
  • 打赏
  • 举报
回复
引用 7 楼 YXTS122 的回复:
tv.setText(item);就是因为把这句话放在按钮的点击事件onClick()里编译不通过,所以才不知道怎么办才好
你定义个常量就好了啊 final a = tv; bt.setOnClickListener(new OnClickListener(){ public void onClick(View v) { Toast.makeText(context,"按钮被按了", Toast.LENGTH_LONG).show(); a.setText(item); } });
SemiraChen 2019-02-01
  • 打赏
  • 举报
回复
YXTS122 2019-01-31
  • 打赏
  • 举报
回复
tv.setText(item);就是因为把这句话放在按钮的点击事件onClick()里编译不通过,所以才不知道怎么办才好
m-oj 应用层 2019-01-31
  • 打赏
  • 举报
回复
button是可点击的,跟onItemClick有冲突,如果你还要通过onItemClickListener,可以再Button外包一层Layout,然后Button设置为不可点击。或者不用onItemClickListener,点击逻辑都放到Button的onClickListener里面
YXTS122 2019-01-31
  • 打赏
  • 举报
回复
3楼不是把我的19个button改成了19个TextView了?不是吧?
m-oj 应用层 2019-01-31
  • 打赏
  • 举报
回复
public class Gridview2Adapter extends BaseAdapter { Context context; TextView tv; private List list; public Gridview2Adapter(Context context,List<String> list,TextView textview){ this.context=context; this. list=list; tv=textview; } @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 TextView bt; if (convertview==null) { convertview=new TextView(context); convertview.setLayoutParams(new GridView.LayoutParams(100,100)); //convertview.setPadding(4, 4, 4, 4); } bt=(TextView)convertview; //处理数据String item=list.get(position); String item=(String)getItem(position); bt.setText(item); // bt.setOnClickListener(new View.OnClickListener(){ // public void onClick(View v) // { // Toast.makeText(context,"按钮被按了", Toast.LENGTH_LONG).show(); // //tv.setText(item); // } // }); // tv.setText(item); return convertview; } } 给你改了下adapter
SemiraChen 2019-01-31
  • 打赏
  • 举报
回复
写接口的方法不行嘛,我自己试过的
m-oj 应用层 2019-01-31
  • 打赏
  • 举报
回复
因为你adapter里给button设置了onClickListener,所已gridview的onitemClick无法响应

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧