Android - ListView侦听器一次添加多个项目后无法正常工作

时间:2013-11-14 03:58:56

标签: android listview android-listview

当一次只有1个项目添加到列表视图时,我的listView运行良好。但是当添加多个项目时,listview中的监听器不会被激活。任何人都可以指导我在这里做错了吗?感谢。

这是我的listView代码:

public class Participant extends ListFragment implements OnClickListener{

Intent intent;
TextView friendId;
Button addparticipant;
String eventId;
ListView lv;

public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    EventController controller = new EventController(getActivity());

    HashMap<String, String> queryValues = new HashMap<String, String>();
    Intent objIntent = getActivity().getIntent();
    eventId = objIntent.getStringExtra("eventId");
    queryValues.put("eventId", eventId);
    ArrayList<HashMap<String, String>> friendList = controller
            .getAllFriends(queryValues);
    if (friendList.size() != 0) {
        lv = getListView();
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                friendId = (TextView) view.findViewById(R.id.friendId);
                String valFriendId = friendId.getText().toString();
                Intent objIndent = new Intent(getActivity(),
                        EventPage.class);
                objIndent.putExtra("friendId", valFriendId);
                startActivity(objIndent);
            }
        });
        lv.setOnItemLongClickListener(new OnItemLongClickListener(){

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0,
                    View arg1, int arg2, long arg3) {
                // TODO Auto-generated method stub
                friendId = (TextView) arg1.findViewById(R.id.friendId);
                registerForContextMenu(getListView());
                return false;
            }

        });
        SimpleAdapter adapter = new SimpleAdapter(getActivity(),
                friendList, R.layout.view_friend_entry, new String[] {
                        "friendId", "friendName", "friendSpending" },
                new int[] { R.id.friendId, R.id.friendName,
                        R.id.friendSpending });
        adapter.notifyDataSetChanged();
        setListAdapter(adapter);
    }
}

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.participant, container, false);
    addparticipant = (Button) rootView.findViewById(R.id.addpart);
    addparticipant.setOnClickListener(this);
    return rootView;

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent objIntent = new Intent(getActivity(),
            AddParticipant.class);
    objIntent.putExtra("eventId", eventId);
    startActivity(objIntent);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    String[] menuItems = getResources().getStringArray(R.array.menu);
    for (int i = 0; i < menuItems.length; i++) {
        menu.add(Menu.NONE, i, i, menuItems[i]);
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    int menuItemIndex = item.getItemId();
    EventController controller = new EventController(getActivity());
    switch (menuItemIndex) {
    case 0:
        String valFriendId = friendId.getText().toString();
        Intent objIndent = new Intent(getActivity(),
                EditParticipant.class);
        objIndent.putExtra("friendId", valFriendId);
        startActivity(objIndent);
        break;
    case 1:
        String valFriendId2 = friendId.getText().toString();
        controller.deleteFriend(valFriendId2);
        Intent broadcastIntent = new Intent();
        broadcastIntent.setAction(UpdateReceiver.NEW_UPDATE_BROADCAST);
        broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
        getActivity().sendBroadcast(broadcastIntent);
        onResume();
    }

    return true;
}

@Override
public void onResume() {
    super.onResume();

    if (getListView() != null) {
        updateData();
    }
}

private void updateData() {
    EventController controller = new EventController(getActivity());
    HashMap<String, String> queryValues = new HashMap<String, String>();
    Intent objIntent = getActivity().getIntent();
    eventId = objIntent.getStringExtra("eventId");
    queryValues.put("eventId", eventId);
    SimpleAdapter adapter = new SimpleAdapter(getActivity(),
            controller.getAllFriends(queryValues),
            R.layout.view_friend_entry, new String[] { "friendId",
                    "friendName", "friendSpending" }, new int[] {
                    R.id.friendId, R.id.friendName, R.id.friendSpending });
    setListAdapter(adapter);
}

这里我将项目添加到listView:

public class AddParticipant extends Activity implements OnClickListener {

private static final int REQUEST_CODE_PICK_CONTACTS = 1;
private static final String TAG = AddParticipant.class.getSimpleName();
private Uri uriContact;
private String contactID;
EditText friendName;
EditText friendNumber;
EditText friendEmail;
EventController controller = new EventController(this);
Button btnadd;
Button addcontact;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addparticipant);
    friendName = (EditText) findViewById(R.id.friendName);
    friendNumber = (EditText) findViewById(R.id.friendNumber);
    friendEmail = (EditText) findViewById(R.id.friendEmail);
    btnadd = (Button) findViewById(R.id.saveButton);
    btnadd.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            HashMap<String, String> queryValues = new HashMap<String, String>();
            Intent objIntent = getIntent();
            String eventId = objIntent.getStringExtra("eventId");
            queryValues.put("eventId", eventId);
            queryValues.put("friendName", friendName.getText().toString());
            queryValues.put("friendNumber", friendNumber.getText()
                    .toString());
            queryValues
                    .put("friendEmail", friendEmail.getText().toString());
            controller.insertFriend(queryValues);
            callHomeActivity(v);
            finish();
        }

    });
    addcontact = (Button) findViewById(R.id.fromcontact);
    addcontact.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    startActivityForResult(new Intent(Intent.ACTION_PICK,
            ContactsContract.Contacts.CONTENT_URI),
            REQUEST_CODE_PICK_CONTACTS);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CODE_PICK_CONTACTS
            && resultCode == RESULT_OK) {
        Log.d(TAG, "Response: " + data.toString());
        uriContact = data.getData();

        retrieveContactName();
        retrieveContactNumber();
        retrieveContactEmail();

    }
}

private void retrieveContactNumber() {

    String contactNumber = null;

    // getting contacts ID
    Cursor cursorID = getContentResolver().query(uriContact,
            new String[] { ContactsContract.Contacts._ID }, null, null,
            null);

    if (cursorID.moveToFirst()) {

        contactID = cursorID.getString(cursorID
                .getColumnIndex(ContactsContract.Contacts._ID));
    }

    cursorID.close();

    Log.d(TAG, "Contact ID: " + contactID);

    // Using the contact ID now we will get contact phone number
    Cursor cursorPhone = getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER },

            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND "
                    + ContactsContract.CommonDataKinds.Phone.TYPE + " = "
                    + ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,

            new String[] { contactID }, null);

    if (cursorPhone.moveToFirst()) {
        contactNumber = cursorPhone
                .getString(cursorPhone
                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    }

    cursorPhone.close();

    Log.d(TAG, "Contact Phone Number: " + contactNumber);
    friendNumber.setText(contactNumber);
}

private void retrieveContactName() {

    String contactName = null;

    // querying contact data store
    Cursor cursor = getContentResolver().query(uriContact, null, null,
            null, null);

    if (cursor.moveToFirst()) {

        // DISPLAY_NAME = The display name for the contact.
        // HAS_PHONE_NUMBER = An indicator of whether this contact has at
        // least one phone number.

        contactName = cursor.getString(cursor
                .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    }

    cursor.close();

    Log.d(TAG, "Contact Name: " + contactName);
    friendName.setText(contactName);

}

private void retrieveContactEmail() {
    ContentResolver contactResolver = this.getContentResolver();

    Cursor emailCursor = contactResolver.query(
            ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
            new String[] { contactID }, null);

    while (emailCursor.moveToNext()) {
        String phone = emailCursor
                .getString(emailCursor
                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
        int type = emailCursor
                .getInt(emailCursor
                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
        String s = (String) ContactsContract.CommonDataKinds.Email
                .getTypeLabel(this.getResources(), type, "");

        Log.d("TAG", s + " email: " + phone);
        friendEmail.setText(phone);
    }

    emailCursor.close();

}

public void callHomeActivity(View view) {
    super.onResume();
}

1 个答案:

答案 0 :(得分:0)