Java 按钮不';不能在列表视图中工作
我在Java 按钮不';不能在列表视图中工作,java,android,android-listview,android-button,Java,Android,Android Listview,Android Button,我在列表视图中有一个按钮 单击另一个活动时,我想转到该活动 但是我得到了这个错误: 在范围中无法访问类型约会的封闭实例 @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View vi=convertView; if(convertView==null) vi = inflate
列表视图中有一个按钮
单击另一个活动时,我想转到该活动
但是我得到了这个错误:
在范围中无法访问类型约会的封闭实例
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.item_row, null);
TextView txtsection = (TextView)vi.findViewById(R.id.section);
TextView txtdoctor = (TextView)vi.findViewById(R.id.doctor);
TextView txtdate = (TextView)vi.findViewById(R.id.date);
TextView txttime = (TextView)vi.findViewById(R.id.time);
btchange = (Button)vi.findViewById(R.id.change);
btchange.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(context, Available.class);
startActivity(i);
}
});
btdelete = (Button)vi.findViewById(R.id.delete);
txtsection.setText(item.section);
txtdoctor.setText(item.doctor);
txtdate.setText(item.date);
txttime.setText(item.time);
return vi; }}
排队
Intent i = new Intent(Appointment.this,Available.class);
约会。仅当Adapter是约会的内部类时,此
才有效
如果不是这样,请使用传递给适配器的上下文
Intent i = new Intent(context, Available.class);
在适配器中声明名为context的专用字段:
private Context context;
在适配器构造函数中,分配传递给它的上下文:
this.context = context;
将getView方法更改为:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if( convertView == null ){
convertView = inflater.inflate(R.layout.yourListLayout, parent, false);
}
Button btchange = (Button)convertView.findViewById(R.id.yourbuttonid);
btchange.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(context, Available.class);
startActivity(i);
}
});
return convertView;
}
package com.example.clinic;
public class CustomListViewAdapter extends BaseAdapter
{
private Context context;
Button btchange,btdelete;
LayoutInflater inflater;
List<ListViewItem> items;
public CustomListViewAdapter(Activity context, List<ListViewItem> items) {
super();
this.context = context;
this.items = items;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.item_row, null);
//add
ListViewItem item = items.get(position);
TextView txtsection = (TextView)vi.findViewById(R.id.section);
TextView txtdoctor = (TextView)vi.findViewById(R.id.doctor);
TextView txtdate = (TextView)vi.findViewById(R.id.date);
TextView txttime = (TextView)vi.findViewById(R.id.time);
btchange = (Button)vi.findViewById(R.id.change);
btchange.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(context, Available.class);
//updated
context.startActivity(i);
}
});
btdelete = (Button)vi.findViewById(R.id.delete);
txtsection.setText(item.section);
txtdoctor.setText(item.doctor);
txtdate.setText(item.date);
txttime.setText(item.time);
return vi;
}
编辑
btChange
还需要指向playmaker420所说的已单击的按钮。
我编辑了代码以实现这一点
编辑2
将代码适配器更改为:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if( convertView == null ){
convertView = inflater.inflate(R.layout.yourListLayout, parent, false);
}
Button btchange = (Button)convertView.findViewById(R.id.yourbuttonid);
btchange.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(context, Available.class);
startActivity(i);
}
});
return convertView;
}
package com.example.clinic;
public class CustomListViewAdapter extends BaseAdapter
{
private Context context;
Button btchange,btdelete;
LayoutInflater inflater;
List<ListViewItem> items;
public CustomListViewAdapter(Activity context, List<ListViewItem> items) {
super();
this.context = context;
this.items = items;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.item_row, null);
//add
ListViewItem item = items.get(position);
TextView txtsection = (TextView)vi.findViewById(R.id.section);
TextView txtdoctor = (TextView)vi.findViewById(R.id.doctor);
TextView txtdate = (TextView)vi.findViewById(R.id.date);
TextView txttime = (TextView)vi.findViewById(R.id.time);
btchange = (Button)vi.findViewById(R.id.change);
btchange.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(context, Available.class);
//updated
context.startActivity(i);
}
});
btdelete = (Button)vi.findViewById(R.id.delete);
txtsection.setText(item.section);
txtdoctor.setText(item.doctor);
txtdate.setText(item.date);
txttime.setText(item.time);
return vi;
}
package com.example.clinic;
公共类CustomListViewAdapter扩展了BaseAdapter
{
私人语境;
按钮btchange,btdelete;
充气机;
清单项目;
公共CustomListViewAdapter(活动上下文,列表项){
超级();
this.context=上下文;
这个项目=项目;
this.inflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u inflater\u SERVICE);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回items.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(最终int位置、视图转换视图、视图组父级){
//TODO自动生成的方法存根
视图vi=转换视图;
if(convertView==null)
vi=充气机。充气(R.layout.item_行,空);
//加
ListViewItem=items.get(位置);
TextView txtsection=(TextView)vi.findViewById(R.id.section);
TextView txtdoctor=(TextView)vi.findViewById(R.id.doctor);
TextView txtdate=(TextView)vi.findViewById(R.id.date);
TextView txttime=(TextView)vi.findViewById(R.id.time);
btchange=(按钮)vi.findviewbyd(R.id.change);
btchange.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
意图i=新意图(上下文,可用.class);
//更新
背景。起始触觉(i);
}
});
btdelete=(按钮)vi.findviewbyd(R.id.delete);
txtsection.setText(项节);
txtdoctor.setText(item.doctor);
txtdate.setText(项目日期);
txttime.setText(项目时间);
返回vi;
}
您是活动的内部类吗?显示完整的适配器。可能您没有提供正确的上下文。您是在单击时创建意图,但从未开始活动。不要编辑我的答案!发表评论或编辑您的问题。很抱歉,我的错,这不会再发生在InstartActivity(i)上;没有区别您是否尝试单击listview行中的按钮?从ListViewItem item=items.get(位置);如果是,则必须从item button b=(button)item.findViewById(R.id.yourbuttonid)中查找按钮视图;现在点击按钮,意图可以解释更多请基于发布的代码,我无话可说。请发布更多代码。当我点击按钮时,它会给我一条弹出消息,上面写着“很遗憾,诊所已停止”它给了我这个错误:这一行有多个标记-表达式的类型必须是数组类型,但它解析为类-项不能解析为类型-标记“”上的语法错误,类应该在这个标记之后。它给了我这个“ListViewItem item=items.[position];”的错误,但我将它改为“ListViewItem=items.get”(位置);“现在它可以工作了,谢谢你对我的耐心:)