Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按钮不';不能在列表视图中工作_Java_Android_Android Listview_Android Button - Fatal编程技术网

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”(位置);“现在它可以工作了,谢谢你对我的耐心:)