Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.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
Android 单击按钮时的ListView自定义_Android_Listview - Fatal编程技术网

Android 单击按钮时的ListView自定义

Android 单击按钮时的ListView自定义,android,listview,Android,Listview,我有一个自定义listview和一个自定义适配器。布局如下: 现在,我有一个默认隐藏的复选框(在customlistlayout中定义)。我希望它在用户按下删除按钮时出现 我尝试设置setVisibility(View.VISIBLE)在按钮onclicklistener中,但应用程序崩溃。 我怎样才能做到这一点。谢谢你的帮助 Log Cat`12-23 22:27:54.236: E/AndroidRuntime(18681): FATAL EXCEPTION: main 12-23 22:

我有一个自定义listview和一个自定义适配器。布局如下:

现在,我有一个默认隐藏的复选框(在customlistlayout中定义)。我希望它在用户按下删除按钮时出现

我尝试设置
setVisibility(View.VISIBLE)在按钮onclicklistener中,但应用程序崩溃。
我怎样才能做到这一点。谢谢你的帮助

Log Cat`12-23 22:27:54.236: E/AndroidRuntime(18681): FATAL EXCEPTION: main
12-23 22:27:54.236: E/AndroidRuntime(18681): Process: com.testing.callreminder, PID: 18681
12-23 22:27:54.236: E/AndroidRuntime(18681): java.lang.NullPointerException
12-23 22:27:54.236: E/AndroidRuntime(18681):    at com.testing.callreminder.MainActivity.onClick(MainActivity.java:130)
12-23 22:27:54.236: E/AndroidRuntime(18681):    at android.view.View.performClick(View.java:4633)
12-23 22:27:54.236: E/AndroidRuntime(18681):    at android.view.View$PerformClick.run(View.java:19330)
12-23 22:27:54.236: E/AndroidRuntime(18681):    at android.os.Handler.handleCallback(Handler.java:733)
12-23 22:27:54.236: E/AndroidRuntime(18681):    at android.os.Handler.dispatchMessage(Handler.java:95)
12-23 22:27:54.236: E/AndroidRuntime(18681):    at android.app.ActivityThread.main(ActivityThread.java:5356)
12-23 22:27:54.236: E/AndroidRuntime(18681):    at java.lang.reflect.Method.invokeNative(Native Method)
12-23 22:27:54.236: E/AndroidRuntime(18681):    at java.lang.reflect.Method.invoke(Method.java:515)
12-23 22:27:54.236: E/AndroidRuntime(18681):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
12-23 22:27:54.236: E/AndroidRuntime(18681):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
布局的OnClickListener实现:

public void onClick(View v) {
    // TODO Auto-generated method stub

    switch(v.getId())
    {
    case R.id.btn_add :
        Intent next = new Intent("com.testing.callreminder.ADDITEM");
        startActivity(next);

        break;
    case R.id.btn_delete:
        chk.setVisibility(View.VISIBLE);
        break;


    default:
        chk.setVisibility(View.GONE);
        break;

    }       
}
自定义适配器

public class MenuListAdapter extends BaseAdapter {
    boolean i;
    Context c;
    ArrayList<MenuListItems> menuList;

    public MenuListAdapter(Context context, ArrayList<MenuListItems> list){
        c=context;
        menuList=list;
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return menuList.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return menuList.get(position);

    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public void setCheckBoxVisibility(boolean visible) {
        i = visible;


    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        MenuListItems menuListItems = menuList.get(position);

          if (convertView == null) {
               LayoutInflater inflater = (LayoutInflater) c
                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               convertView = inflater.inflate(R.layout.customlist, parent, false);

              }
          if(i){
              CheckBox ck = (CheckBox) convertView.findViewById(R.id.delBox);
              ck.setVisibility(View.VISIBLE);
              notifyDataSetChanged();

          }
                TextView id = (TextView) convertView.findViewById(R.id.tvhide);
                id.setText(menuListItems.getSlno());
              TextView title = (TextView) convertView.findViewById(R.id.tvtitle);
              title.setText(menuListItems.getTitle());
              TextView phone = (TextView) convertView.findViewById(R.id.tvpnumber);
              phone.setText(menuListItems.getPhone());

              return convertView;
        }
}
公共类MenuListAdapter扩展BaseAdapter{
布尔i;
上下文c;
ArrayList menuList;
公共MenuListAdapter(上下文、ArrayList列表){
c=上下文;
menuList=列表;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回menuList.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回menuList.get(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
public void setCheckBoxVisibility(布尔可见){
i=可见;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
MenuListItems MenuListItems=menuList.get(位置);
if(convertView==null){
LayoutInflater充气机=(LayoutInflater)c
.getSystemService(上下文布局\充气机\服务);
convertView=充气机。充气(R.layout.customlist,父项,false);
}
如果(i){
复选框ck=(复选框)convertView.findViewById(R.id.delBox);
ck.setVisibility(View.VISIBLE);
notifyDataSetChanged();
}
TextView id=(TextView)convertView.findViewById(R.id.tvhide);
id.setText(menuListItems.getSlno());
TextView title=(TextView)convertView.findViewById(R.id.tvtitle);
title.setText(menuListItems.getTitle());
TextView电话=(TextView)convertView.findViewById(R.id.tvpnumber);
setText(menuListItems.getPhone());
返回视图;
}
}

在适配器上创建一个方法,如“setCheckBoxVisibility(boolean visible)”;在该方法中,您将布尔值保存到一个私有字段中,并调用notifyDataSetChanged();在getView方法中,您将检查此字段并设置可见性

public class MenuListAdapter extends BaseAdapter {
boolean i;
boolean showCheckbox;
Context c;
ArrayList<MenuListItems> menuList;

public MenuListAdapter(Context context, ArrayList<MenuListItems> list){
    c=context;
    menuList=list;
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return menuList.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return menuList.get(position);

}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

public void setCheckBoxVisibility(boolean visible) {
    i = visible;
    notifyDataSetChanged(); //notify dataset changed here

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    MenuListItems menuListItems = menuList.get(position);

      if (convertView == null) {
           LayoutInflater inflater = (LayoutInflater) c
             .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           convertView = inflater.inflate(R.layout.customlist, parent, false);

          }
      if(i){
          CheckBox ck = (CheckBox) convertView.findViewById(R.id.delBox);

          if(i)
              ck.setVisibility(View.VISIBLE);
          else
              ck.setVisibility(View.GONE);
      }
            TextView id = (TextView) convertView.findViewById(R.id.tvhide);
            id.setText(menuListItems.getSlno());
          TextView title = (TextView) convertView.findViewById(R.id.tvtitle);
          title.setText(menuListItems.getTitle());
          TextView phone = (TextView) convertView.findViewById(R.id.tvpnumber);
          phone.setText(menuListItems.getPhone());

          return convertView;
    }
    } 
公共类MenuListAdapter扩展BaseAdapter{
布尔i;
布尔显示复选框;
上下文c;
ArrayList menuList;
公共MenuListAdapter(上下文、ArrayList列表){
c=上下文;
menuList=列表;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回menuList.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回menuList.get(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
public void setCheckBoxVisibility(布尔可见){
i=可见;
notifyDataSetChanged();//此处更改了notify数据集
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
MenuListItems MenuListItems=menuList.get(位置);
if(convertView==null){
LayoutInflater充气机=(LayoutInflater)c
.getSystemService(上下文布局\充气机\服务);
convertView=充气机。充气(R.layout.customlist,父项,false);
}
如果(i){
复选框ck=(复选框)convertView.findViewById(R.id.delBox);
如果(i)
ck.setVisibility(View.VISIBLE);
其他的
ck.setVisibility(View.GONE);
}
TextView id=(TextView)convertView.findViewById(R.id.tvhide);
id.setText(menuListItems.getSlno());
TextView title=(TextView)convertView.findViewById(R.id.tvtitle);
title.setText(menuListItems.getTitle());
TextView电话=(TextView)convertView.findViewById(R.id.tvpnumber);
setText(menuListItems.getPhone());
返回视图;
}
} 

请提供一些代码和堆栈跟踪(应用程序崩溃的原因)张贴日志猫错误trace@sockeqweRohit在MainActivity.java中发布了检查行130。。。我猜变量chk是空的@sockeqwe 130是chk.setVisibility(View.VISIBLE),我不知道它为什么会抛出一个错误我是新来的,你能不能用一个片段来进一步解释一下?请?我会努力的,对不起,我的英语不好。该复选框不在活动中,但在ListViewItem中,您需要循环查看listview中的所有项目并逐个进行更改。使我显示的方式更简单,因为您只对listview重新充电,getView方法负责更改;打破还有一个问题,现在如果我选择first listitem并向下滚动下一个集合,下一个集合中的第一个项目将被自动检查。如何解决?是的,为了提高性能,重新使用相同的视图,最好的方法是将检查的值存储在MenuListItems实例中。创建一个属性并像ck.setChecked(menuListItems.getChecked())那样使用您的值;