获取通讯录数据后布局在自定义的adapter上,怎么获取到checkbox选中的数据?具体怎么实现? 10C

1、实体类
package com.app.bean;

import com.app.dao.PinyinTool;

/**

  • Created by dell-1 on 2017/11/8. */

public class ContactsBean {
private int contactId;
private int icon;
private String contactsName;
private String company;
private String phoneNumber;
private String remark;
private String job;
private String email;
private Boolean selectedContact=false;
public Boolean getSelectedContact() {
return selectedContact;
}

public void setSelectedContact(Boolean selectedContact) {
    this.selectedContact = selectedContact;
}



public String getSort_key_primary() {
    return sort_key_primary;
}

public void setSort_key_primary(String sort_key_primary) {
    this.sort_key_primary = sort_key_primary;
}

private String sort_key_primary;


public String getJob() {
    return job;
}

public void setJob(String job) {
    this.job = job;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}



public int getContactId() {
    return contactId;
}

public void setContactId(int contactId) {
    this.contactId = contactId;
}

public int getIcon() {
    return icon;
}

public void setIcon(int icon) {
    this.icon = icon;
}

public String getContactsName() {
    return contactsName;
}

public void setContactsName(String contactsName) {
    this.contactsName = contactsName;
}

public String getCompany() {
    return company;
}

public void setCompany(String company) {
    this.company = company;
}

public String getPhoneNumber() {
    return phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
}

public String getRemark() {
    return remark;
}

public void setRemark(String remark) {
    this.remark = remark;
}

//获取名字拼音首字母
public String getFirstLetterOfName(){
String key="";
if (sort_key_primary!=null){
key= PinyinTool.getFirstSpell(sort_key_primary);

    }
    return key;
}

}
2、主程序
package com.app.com.kag.activity;

import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;

import com.addresslist.R;
import com.app.FragmentAdapter.AddContactFromAddressAdapter;
import com.app.bean.ContactsBean;
import com.app.dao.ContactsDao;

import java.util.ArrayList;
import java.util.List;

public class AddContactFromAddressList extends AppCompatActivity {
private ContactsBean contactsBean;
private ListView lv;
private ArrayList contacts;
private ContactsDao dao;
private Button mAddContacts;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_contact_from_address_list);

   init();
}
private void init(){
    lv = findViewById(R.id.lv_contacts_list);
    mAddContacts=findViewById(R.id.btn_add_contacts);
    //获取通讯录数据并布局到adapter
    contacts = new ArrayList();
    reaContacts(contacts);
    final AddContactFromAddressAdapter adapter = new AddContactFromAddressAdapter(this, contacts);
    lv.setAdapter(adapter);

//

//添加按钮的点击事件
mAddContacts.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
//从手机通讯录中读取数据
public List reaContacts(ArrayList contacts) {
Uri uri = Uri.parse("content://com.android.contacts/contacts");
ContentResolver resolver = this.getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, ContactsContract.Contacts.SORT_KEY_PRIMARY);
while (cursor.moveToNext()) {
//

        int id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
        String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

// String phone =cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));//这行报错:Make sure the Cursor is initialized correctly before accessing data from it
String sort_key = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.SORT_KEY_PRIMARY));
contactsBean = null;
contactsBean = new ContactsBean();//此对象的创建必须在while循环内,不然只得到一条数据。
contactsBean.setContactsName(name);
contactsBean.setContactId(id);
contactsBean.setSort_key_primary(sort_key);
Cursor phone = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null);
ArrayList phoneNumber = new ArrayList();
while (phone.moveToNext()) {

            String number = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            phoneNumber.add(number);
            contactsBean.setPhoneNumber(String.valueOf(phoneNumber));
        }

        contacts.add(contactsBean);

// System.out.println(contactsBean.getContactsName() + ":" + contactsBean.getPhoneNumber()+sort_key);

    }

return contacts;

}

}

3、adapter
package com.app.FragmentAdapter;

import android.content.Context;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

import com.addresslist.R;
import com.app.bean.ContactsBean;

;import java.util.ArrayList;
import java.util.List;

/**

  • Created by dell-1 on 2018/1/9. */

public class AddContactFromAddressAdapter extends BaseAdapter {
//数据
private List contacts;

//是否选中
private ArrayList selectedList;
;
private LayoutInflater inflater;

public AddContactFromAddressAdapter(Context context, List<ContactsBean> contacts) {
    this.contacts = contacts;
    inflater = LayoutInflater.from(context);
    selectedList=new ArrayList();


}

@Override
public int getCount() {
    return contacts.size();
}

@Override
public Object getItem(int position) {
    return contacts.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.contacts_cell, null);
        holder = new ViewHolder();
        holder.sort_key = convertView.findViewById(R.id.tv_sort_key);
        holder.mPhones = convertView.findViewById(R.id.tv_phones);
        holder.checkBoxSelected = convertView.findViewById(R.id.cb_selected);
        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

//控件上添加数据
holder.sort_key.setText(contacts.get(position).getFirstLetterOfName());
holder.mPhones.setText(contacts.get(position).getContactsName() + ":"
+ contacts.get(position).getPhoneNumber());
if (contacts.get(position).getSelectedContact()) {
holder.checkBoxSelected.setChecked(true);
} else {
holder.checkBoxSelected.setChecked(false);
}
//checkbox点击事件判断
holder.checkBoxSelected.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (contacts.get(position).getSelectedContact()) {
contacts.get(position).setSelectedContact(false);
selectedList.remove(contacts.get(position));

            } else {
                contacts.get(position).setSelectedContact(true);
                //选中的添加到集合中
                selectedList.add(contacts.get(position));


            }

        }
    });

    return convertView;
}

private final class ViewHolder {
    public TextView sort_key;
    public TextView mPhones;
    public CheckBox checkBoxSelected;
}

}

4、运行的截图
图片说明

5个回答

private HashMap mSelectedGrouplists;//key=列表中展示的数据,value=position;
private List mList;//解决复用
private ArrayList selecteds;//上一个界面携带过来的数据集

public GroupAdapter() {
    mSelectedGrouplists = new HashMap<>();
    mList = new ArrayList<>();
    selecteds = new ArrayList<>();
}

public List<String> getDataSource() {
    return mDataSource;
}

/**
 * 回显
 *
 * @param list
 */
public void checkSelectedGrouplists(ArrayList<String> list) {
    if (list == null) {
        return;
    }
    selecteds = list;
    for (String s : list) {
        if (mDataSource.contains(s)) {
            int i = mDataSource.indexOf(s);
            if (!mSelectedGrouplists.containsKey(s))
                mSelectedGrouplists.put(s, i);
        }
    }

}
//获取选中的键值对集合
public HashMap<String, Integer> getSelectedGrouplists() {
    return mSelectedGrouplists;
}

@Override
public ClickableViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    bindContext(parent.getContext());
    View inflate = LayoutInflater.from(context).inflate(R.layout.group_item, parent, false);
    return new GroupViewHolder(inflate);
}

@Override
public void onBindViewHolder(ClickableViewHolder holder, final int position) {
    super.onBindViewHolder(holder, position);
    if (holder instanceof GroupViewHolder) {
        final GroupViewHolder gvh = (GroupViewHolder) holder;
        final String group = mDataSource.get(position);//group=="id:名称"
        String[] group_split = group.split(":");
        final String group_name = group_split[1];

        mList.clear();
        for (String key : mSelectedGrouplists.keySet()) {
            if (mDataSource.contains(key)) {
                int i = mDataSource.indexOf(key);
                mList.add(i);
            }

        }
        gvh.mGroupName.setText(group_name);//名称
        gvh.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    if (!mList.contains(position)) {
                        mList.add(position);
                    }
                    if (!selecteds.contains(group)) {
                        selecteds.add(group);
                    }
                    if (!mSelectedGrouplists.keySet().contains(group)) {//名称与id拼接的字符串
                        mSelectedGrouplists.put(group, position);
                    }
                } else {
                    if (mList.contains(position)) {
                        int i = mList.indexOf(position);
                        mList.remove(i);
                    }
                    if (selecteds.contains(group)) {
                        int i = selecteds.indexOf(group);
                        selecteds.remove(i);
                    }
                    if (mSelectedGrouplists.keySet().contains(group)) {
                        mSelectedGrouplists.remove(group);
                    }

                }
                itemClickListener.onItemClick(position, gvh);

            }
        });
        //回显
        if (selecteds.contains(group)) {
            if (!mList.contains(position))
                mList.add(position);
        }
        //解决复用问题
        gvh.mCheckBox.setChecked(mList.contains(position) ? true : false);

    }
}
 稍微修改后应该可以解决你的问题。

也可以这样的吧holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if(isChecked){ if(!chooseNum.contains(position)){ System.out.println(position); chooseNum.add(position); } }else{ chooseNum.remove(Integer.valueOf(position)); } } });public ArrayList getChooseList(){ return chooseNum; }通过adpter.getChooseList获得选中的 行的数组。

holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if(isChecked){ if(!chooseNum.contains(position)){ System.out.println(position); chooseNum.add(position); } }else{ chooseNum.remove(Integer.valueOf(position)); } } });public ArrayList getChooseList(){ return chooseNum; }

取到选中的 联系人唯一标识 然后根据唯一标示取数据库查询

将选中的position放入集合中,List mPosition;

 for(int i = 0;i < mPosition.size; i++){
ContactsBean contactsBean = contacts.get(i)
........
 }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android开发如何在adapter的onCreateViewHolder中获取list实例
我想知道安卓手机的闹钟程序里修改时间的功能是怎么实现的,就是当我在编辑完闹钟并确认后,主界面能够判断出我编辑的是哪个闹钟并且做出更新。我目前的思路是在自定义adapter的onCreateViewHolder中用OnClick事件将当前时间用Intent传入编辑界面,然后编辑界面再用Intent返回更新的时间,但是我怎么判断是哪个闹钟。我在自定义类里面加了id这个参数,但是不知道adapter该怎么获取。position只有onBindViewHolder才有,但是应该要在onCreateViewHolder里获取这个list实例,求指教
自定义Adapter继承自BaseAdapter的方法重写问题
自定义Adapter继承自BaseAdapter时重写的需实现的四个方法方法都是谁来调用的,是在绑定组件跟adapter时由系统负责调用的吗?
android gridview自定义adapter,adapter中的子控件如何隐藏。
如题所示。我在adapter里想隐藏和显示控件,设置viewHolder.mIvLogo.setVisibility(View.VISIBLE);无效。怎样设置才能有效隐藏显示呢?求帮助!
Android中怎样用自定义的adapter加载日期列表
想实现以下的效果,因为自己技术大白,不知道怎么处理,贴出代码: 我是用ViewPager + Fragment实现页面切换的,其中在fragmentB中有个按钮button,fragmentA中有个listview,现在想实现的是,通过点击B中的button,在A中的listview中显示一个item,item的名字用当前时间来设置。我用的是自定义的adapter, ``` private class DateAdapter extends ArrayAdapter<Date_item> { private int resourceId; public DateAdapter(Context context, int dateresourceId, List<Date_item> objects){ super(context, dateresourceId,objects); resourceId = dateresourceId; } @Override public View getView(int position,View convertView, ViewGroup parent){ Date_item date_item = getItem(position);//获取当前项的date实例 View view; ViewHolder viewHolder; if(convertView == null){ view = LayoutInflater.from(getContext()).inflate(resourceId,null); viewHolder = new ViewHolder(); viewHolder.date = (TextView)view.findViewById(R.id.chart_date); view.setTag(viewHolder);//将viewHolder缓存到view中 }else { view = convertView; viewHolder = (ViewHolder)view.getTag(); } return view; } class ViewHolder{ TextView date; } } ``` 我将A中列表的item也设置在了B中: ``` //列表item的时间形式 //设置时间格式 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd/HH:mm:ss"); //获取当前时间 long time = System.currentTimeMillis(); //将long转化为Date Date date = new Data(time); String timeSave = format.format(date); ``` 在B中的button的监听事件里面: ``` btn.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ DateAdapter dateAdapter =new DateAdapter(getActivity(),R.layout.item_layout,dateList); listView.setAdapter(dateAdapter); } }) ``` 程序一运行就闪退,错误是NullPointerException:Attempt to invoke virtual method'void android widget.ListView.setAdapter(android.widget.ListAdapter)'on a null object reference. 请问这是什么情况,这问题困了我很久了,在线等,感谢各位
Android ListView 自定义Adapter 滑动时报空指针异常
问题背景:在制作一个即时聊天的APP中,聊天界面聊天消息的显示我使用了ListView,并且使用了自定义的Adapter,获取到聊天记录之后ListView可以正常显示,但是一旦滑动就会报空指针异常。我查看了很多博客,都没有提到与这个相关或者类似的错误已经被这个错误逼疯了,希望有了解的大神能够给予指点。 具体相关代码如下: 自定义的Adapter: ``` public class ChatMessageAdapter extends BaseAdapter { private LayoutInflater layoutInflater; private List<MessageShow> messageShowList; public ChatMessageAdapter(Context context, List<MessageShow> messageShowList){ layoutInflater = LayoutInflater.from(context); this.messageShowList = messageShowList; } @Override public int getCount() { return messageShowList.size(); } @Override public Object getItem(int position) { return messageShowList.get(position); } @Override public int getItemViewType(int position) { if(messageShowList.get(position).getMessageType()==0) return 0; else return 1; } //Item类型的总数 @Override public int getViewTypeCount() { return 2; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { MessageShow messageShow = messageShowList.get(position); ViewHolder viewHolder = null; if(convertView == null){ if(messageShow.getMessageType() == 0){ convertView = layoutInflater.inflate(R.layout.from_message_item,null); viewHolder = new ViewHolder(); // viewHolder.imageView = (ImageView) convertView.findViewById(R.id.from_user_icons); viewHolder.time = (TextView) convertView.findViewById(R.id.from_time); viewHolder.message = (TextView) convertView.findViewById(R.id.from_message); } else{ convertView = layoutInflater.inflate(R.layout.to_message_item,null); viewHolder = new ViewHolder(); // viewHolder.imageView = (ImageView) convertView.findViewById(R.id.to_user_icons); viewHolder.time = (TextView) convertView.findViewById(R.id.to_time); viewHolder.message = (TextView) convertView.findViewById(R.id.to_message); } } else { viewHolder = (ViewHolder) convertView.getTag(); } System.out.println("我到了这里"+position); System.out.println("我添加了适配器: "+messageShow.getContents()); // viewHolder.imageView.setImageResource(R.drawable.photo); //报空指针异常的是这里 viewHolder.message.setText(messageShow.getContents()); viewHolder.time.setText(messageShow.getTime()); return convertView; } private final class ViewHolder{ // ImageView imageView; TextView time; TextView message; } ``` ,ChatActivity代码如下: ``` private List<MessageShow> showMessageList; private ChatMessageAdapter chatMessageAdapter; 、、、省略无关 //初始化数据 private void initData(){ showMessageList = new ArrayList<MessageShow>(); chatMessageAdapter = new ChatMessageAdapter(this,showMessageList); listView.setAdapter(chatMessageAdapter); getMessageRecord(); chatMessageAdapter.notifyDataSetChanged(); } ``` 其中获取聊天记录我已经在控制台打印出来检查过了,没有错误,而ListView能够显示说明Apapter也不会有基本的错误,但是还是报空指针。我对错误的猜测如下: 虽然给的数据集可能有几十项,但是Adapter加载的时候只加载了当前显示的几项,后面的没加载,等我我滑动之后去加载的时候没加载到数据就报空指针了。但是这不太科学啊,我看了好多博客发现都没有专门说到这点,仔细检查代码也不知道应该怎么改,求指教。报错信息如下: ``` I/System.out: 我到了这里1 I/System.out: 我添加了适配器: 图片这些不能点击? I/System.out: 我到了这里2 I/System.out: 我添加了适配器: 还没做那些功能呢233 I/System.out: 我到了这里3 I/System.out: 我添加了适配器: 图片和表情 I/System.out: 我到了这里4 I/System.out: 我添加了适配器: 额 I/System.out: 我到了这里5 I/System.out: 我添加了适配器: 准备等APP开发完之后再说 I/System.out: 我到了这里6 I/System.out: 我添加了适配器: 真的挺费脑的 I/System.out: 我到了这里7 I/System.out: 我添加了适配器: 嗯 加油 E/InputEventReceiver: Exception dispatching input event. D/AndroidRuntime: Shutting down VM W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa6160908) E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at cn.justwithme.withme.Adapaer.ChatMessageAdapter$override.getView(ChatMessageAdapter.java:84) at cn.justwithme.withme.Adapaer.ChatMessageAdapter$override.access$dispatch(ChatMessageAdapter.java) at cn.justwithme.withme.Adapaer.ChatMessageAdapter.getView(ChatMessageAdapter.java:0) ``` 本来有十几项的,第一页只有7项,我在Adapter的输出就只出输出了7项。 ![图片说明](https://img-ask.csdn.net/upload/201702/19/1487495789_116858.png) ![图片说明](https://img-ask.csdn.net/upload/201702/19/1487495801_419892.png)
List Filter自定义的Adapter不能得出结果
我正在开发一个应用程序,有一个list列表,在列表上面有一个 edittext编辑框,当我在编辑框中输入内容时,得不到和输入的信息相符合的结果。请问错误出现在哪儿?以下是 Activity和Adapter的代码。谢谢! **Activity** public class ListFilterActivity extends ListActivity{ ListView list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list_filter); list = getListView(); list.isTextFilterEnabled(); // final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, // android.R.layout.simple_list_item_1, android.R.id.text1, // getModel()); final CustomAdapter adapter = new CustomAdapter(ListFilterActivity.this, getModel()); setListAdapter(adapter); EditText filterEditText = (EditText) findViewById(R.id.filterText); filterEditText.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { adapter.getFilter().filter(s.toString()); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void afterTextChanged(Editable s) { } }); } private ArrayList<String> getModel() { ArrayList<String> list = new ArrayList<String>(); list.add("Linux"); list.add("Windows7"); list.add("Suse"); list.add("Eclipse"); list.add("Ubuntu"); list.add("Solaris"); list.add("Android"); list.add("Ayes"); list.add("iPhone"); return list; } } ** Adapter ** public class CustomAdapter extends ArrayAdapter<String> { private final Context context; private final ArrayList<String> names; private LayoutInflater mInflater; private TextView txt; public CustomAdapter(Context context, ArrayList<String> names) { super(context, R.layout.row, names); this.context = context; this.names = names; mInflater = LayoutInflater.from(context); } public Filter getFilter() { if(newFilter == null) { newFilter = new Filter() { @Override protected void publishResults(CharSequence constraint, FilterResults results) { // TODO Auto-generated method stub Log.d("TAG", "publishResults"); notifyDataSetChanged(); } @Override protected FilterResults performFiltering(CharSequence prefix) { FilterResults results = new FilterResults(); ArrayList<String> i = new ArrayList<String>(); if (prefix!= null && prefix.toString().length() > 0) { for (int index = 0; index < names.size(); index++) { String si = names.get(index); if(si.compareTo(prefix.toString()) == 0){ i.add(si); } } results.values = i; results.count = i.size(); } else{ synchronized (names){ results.values = names; results.count = names.size(); } } return results; } }; } // Log.d("TAG", "end getFilter"); return newFilter; } @Override public String getItem(int position) { return super.getItem(position); } @Override public int getCount() { return super.getCount(); } @Override public View getView(int position, View convertView, ViewGroup parent) { View rowView = convertView; if(rowView == null) { rowView = mInflater.inflate(R.layout.row, null); txt = (TextView)rowView.findViewById(R.id.text1); } else { rowView.getTag(); } txt.setText(names.get(position)); return rowView; } }
为什么Android studio的通讯录里面有数据但是显示不出来
我的程序是从主活动里面打开次活动并且将通讯录里的联系人用List View显示出来。 在主活动中成功打开了次活动但是却显示不出来列表。可是我的通讯录里面是有数据的,通讯录如图: ![图片说明](https://img-ask.csdn.net/upload/201912/11/1576052176_509247.png) 程序运行图: ![图片说明](https://img-ask.csdn.net/upload/201912/11/1576052268_626559.png) 下面是次活动的代码: xml设计: ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/contacts_text" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="cn.edu.jluzh.sy06_contacts.ContactsText"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/contacts_view" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout> ``` MaintActivity代码块: ``` public class ContactsText extends AppCompatActivity { ArrayAdapter<String> adapter; List<String> contactsList = new ArrayList<>();//列表的字段 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contacts_text); ListView contactsView = (ListView) findViewById(R.id.contacts_view);//列表 adapter = new ArrayAdapter<String>(ContactsText.this, android.R.layout.simple_list_item_1,contactsList); contactsView.setAdapter(adapter); //查看用户是否已授权 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {//不授 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS},1);//返回一个申请的对话框,无论什么结果都会回到第三个函数 } else {//授权的话直接打开 readContacts(); } } private void readContacts() { Cursor cursor = null; StringBuilder stringBuilder = null; try { cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); if (cursor != null) { while (cursor.moveToFirst()) { //get name String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); //get number String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); String contact = (stringBuilder.append(displayName).append("/n").append(number)).toString(); contactsList.add(contact); } adapter.notifyDataSetChanged(); } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } } private void OnRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { //(请求码,申请的权限名,授权结果 switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { readContacts(); } else { Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show(); } break; default: } } } ``` 求大神指点啊,我哭了,秃头少女真的找不到原因a
如何在自定义的Adapter中使用startActivity()?
本人Android初学者,想在RecyclerView的OnClick()中打开新活动,查了各种资料实践很久都不成功,请大神指点……
android的listview中的自定义adapter初次打开不显示缓存的网络图片
求助,小弟最近在写用listview 的 adapter ,在 imageview 上显示网络图片,缓存下来的图片保存成 bitmap , 在 adapter 中的 getView 设置了 imageView_image.setImageBitmap(bitmap); 但不知为何每第一次打开列表图片等待很长总是不显示,但在 listview 上下滚动的时候显示出来了,求解
StartIntent()在自定义Adapter不运行
在列表视图中创建的自定义Adapter用来监听checkbook和列表的状态,代码: public class CustomAdapter extends ArrayAdapter<String> { private final Activity context; private final String[] names; private final String TAG = "MyPerformanceArrayAdapter"; private static final int TASK_CREATE = 0; private static final int ACTIVITY_EDIT = 1; static class ViewHolder { public TextView text; public CheckBox reminderCheckBox; } public CustomAdapter(Activity context, String[] names) { super(context, R.layout.reminder_row, names); this.context = context; this.names = names; } @Override public View getView(int position, View convertView, ViewGroup parent) { View rowView = convertView; if (rowView == null) { LayoutInflater inflater = context.getLayoutInflater(); rowView = inflater.inflate(R.layout.reminder_row, null); ViewHolder viewHolder = new ViewHolder(); viewHolder.text = (TextView) rowView.findViewById(R.id.reminderRowTextId); viewHolder.reminderCheckBox = (CheckBox) rowView.findViewById(R.id.CheckBoxId); rowView.setTag(viewHolder); } final int pos = position; final ViewHolder holder = (ViewHolder) rowView.getTag(); String s = names[position]; holder.text.setText(s); holder.reminderCheckBox.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (holder.reminderCheckBox.isChecked()) { Toast.makeText(getContext(), "pos-->chkd" + pos, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getContext(), "pos-->un--chkd" + pos, Toast.LENGTH_SHORT).show(); } } }); holder.text.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "TEXT CLICKED" + pos , Toast.LENGTH_SHORT).show(); Intent intent = new Intent(context,ReminderModificationActivity.class); intent.putExtra(TasksDBAdapter.KEY_ROWID, pos); Log.i(TAG, "row clickd --> " + pos); startActivity(intent,ACTIVITY_EDIT); <<<<-------ERROR ON THIS LINE } }); return rowView; } } 然后出现错误信息: The method startActivity(Intent, int) is undefined for the type new View.OnClickListener(){} 为虾米额?
Android 里面自己定义的Adapter运行崩溃
class MyAdapter extends ArrayAdapter { public MyAdapter(Context context, int resource) { super(context, resource); } @Override public long getItemId(int position) { return position; } ## ** @Override ## public int getCount() { ## return imgs.length; ## }** @Override public View getView(int position, View convertView, ViewGroup parent) { View view=null; if(convertView==null){ LayoutInflater inflater= (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.item,null); }else { view=convertView; } ImageView iv=(ImageView)view.findViewById(R.id.imageView); TextView tv= (TextView) view.findViewById(R.id.textView); iv.setImageResource(imgs[position]); tv.setText(names[position]); return view; } } 运行到加黑的getCount的时候程序就会崩溃,编程小白,望指教
安卓这么才能把activity中获取到的数据传递到adapter里面
我现在就是在登录界面获取到了数据但是需要传递到适配器里面 因为适配器里面有一个点击事件需要请求接口但是需要传值 (传值是登录界面保存的数据)
关于adapter获取值得问题
采用Arraylist自定义了个class,然后在这个list上添加了数据,但是用list.setadapter()只能获取List的个数,Q的值,但是C的16个值一直都是0,不知道是为什么。 ``` public class CapListNode { private int Q; private int C[] = new int[16]; public int getQ() { return Q; } public void setQ(int q) { Q = q; } public int[] getC() { return C; } public void setC(int c,int i) { C[i] = c; } } ``` ``` OrderTscQ(m_iCapCountF, FBlist, m_CapF); //这个是将list清空后,根据算法添加数据。 listFB.setAdapter(FBadapter); ``` public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub CapListNode caplist = list.get(position); int c[] = new int[16]; c = caplist.getC(); //打印后C的16个值全是0 ``` ``` 在问题出现的时候也做过一些实验,list在setadapter时,确实里面值都已经填充正确。不知道为什么只显示Q的值,C的16个值全是0.(自己写的adapter里面都是正确的,也做个实验验证过) 求帮忙分析一下,万分感激。
下拉框的使用细节 popup
为什么上次使用一个下拉框 popup 的时候,在自定义的adapter中使用getView来添加数据, 但是使用自定义的testView控件一直报错,报错的大概意思是布局错误,后面同事帮忙解决了 将自己定义的testview 改为 getview方法中的 converview 带缓存的那个就可以了呢 同事也搞不清原因
andorid自定义适配器 求教一下 或者有什么详细的教学视频推荐
![图片说明](https://img-ask.csdn.net/upload/201511/10/1447140509_708942.png) 就是利用自定义的adapter弄成大概这样 有谁能讲解一下大概的思路么 andorid新手 刚刚才学会一些布局而已 现在想学习一下适配器和listView 求帮助
Activity 和 adapter之间的数据
我使用 BaseAdapter 来显示 ListView 的行数。 Activity 和adapter 在两个不同的类中创建。 在 ListActivity 中,我使用下面的代码设置行中的数据。 String[] FileName = {"a", "b", "c"}; MyAdapter a = new MyAdapter(this, FileName); setListAdapter(a); 在adapter中的每一行里都显示FileName,但是它可能改变 FileName。所以在 activity 中,我想获取改变了的 FileName 数组。 如何实现? Adapter 代码: private String[] name = null; public BookmarkListAdapter(Context ctxt, String[] s) { name = s; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewTag viewTag; if(convertView == null) { convertView = myInflater.inflate(R.layout.row_bookmark_list, null); viewTag = new ViewTag((TextView)convertView.findViewById(R.id.row_bookmark_info)); convertView.setTag(viewTag); } else { viewTag = (ViewTag) convertView.getTag(); } viewTag.n.setText(name[position]); name[position] = name[(position + 1) % 3]; //change } class ViewTag { TextView n; public ViewTag(TextView t) { this.n = t; } } 在这个例子中,数组改变成{"b", "c", "a"}。在 activity 中,如何获取改变了的数组?
android listview自定义adapter,getview方法不显示
adapter的getCount值不为0,但是不执行getview方法,在ErrorLog中打印出来的log在下面贴出来了,希望路过的大牛们帮忙看看 ![图片说明](https://img-ask.csdn.net/upload/201507/23/1437619354_763964.png)
Android自定义Adapter重写的getView()不执行
想写个邮箱自动补全 直接用了系统的下拉菜单 ![图片说明](https://img-ask.csdn.net/upload/201511/06/1446796673_971894.jpg) 这是Adapter的代码 ![图片说明](https://img-ask.csdn.net/upload/201511/06/1446796828_903480.jpg) getView()方法不执行
android中怎么把新增加的数据插入到adapter前面。
我现在只会用。。list.add(data) → adapter.notifyDataSetChanged()...把数据放在adapter的后面。。
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
五年程序员记流水账式的自白。
不知觉已中码龄已突破五年,一路走来从起初铁憨憨到现在的十九线程序员,一路成长,虽然不能成为高工,但是也能挡下一面,从15年很火的android开始入坑,走过java、.Net、QT,目前仍处于android和.net交替开发中。 毕业到现在一共就职过两家公司,目前是第二家,公司算是半个创业公司,所以基本上都会身兼多职。比如不光要写代码,还要写软著、软著评测、线上线下客户对接需求收集...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
一文详尽系列之模型评估指标
点击上方“Datawhale”,选择“星标”公众号第一时间获取价值内容在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标,针对不同机器学习问题如回归、分类、排...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!!
去年,阿里云发布了本地 IDE 插件 Cloud Toolkit,仅 IntelliJ IDEA 一个平台,就有 15 万以上的开发者进行了下载,体验了一键部署带来的开发便利。时隔一年的今天,阿里云正式发布了 Visual Studio Code 版本,全面覆盖前端开发者,帮助前端实现一键打包部署,让开发提速 8 倍。 VSCode 版本的插件,目前能做到什么? 安装插件之后,开发者可以立即体验...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
2019年除夕夜的有感而发
天气:小雨(加小雪) 温度:3摄氏度 空气:严重污染(399) 风向:北风 风力:微风 现在是除夕夜晚上十点钟,再有两个小时就要新的一年了; 首先要说的是我没患病,至少现在是没有患病;但是心情确像患了病一样沉重; 现在这个时刻应该大部分家庭都在看春晚吧,或许一家人团团圆圆的坐在一起,或许因为某些特殊原因而不能团圆;但不管是身在何处,身处什么境地,我都想对每一个人说一句:新年快乐! 不知道csdn这...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问