简体   繁体   English

是否有可能将不同的项目添加到android listview

[英]Is it possible to add different items into android listview

i have a ListView in my application, i fetch contacts from user phonebook then displays them into ListView, now what i want to do is to add different child views into ListView item based on some condition like my application check each phonebook contact for it's availability on server database and what i want to achieve is to add voice/video call buttons for that particular contact and add invite button for all other contacts that are not available in database. 我在我的应用程序中有一个ListView,我从用户电话簿中获取联系人,然后将其显示到ListView中,现在我想要做的就是根据某些条件(例如,我的应用程序)在ListView项目中添加不同的子视图,以检查每个电话簿联系人的可用性。服务器数据库,我要实现的是为该特定联系人添加语音/视频通话按钮,并为数据库中不可用的所有其他联系人添加邀请按钮。

My condition applies on these three child's of ListView item, voice call button, video call button and invite button and my condition is if user is available in database then i only want to display voice/video call button and hide invite button but if the user is not available then i wan to display invite button and hide audio/video call buttons 我的条件适用于ListView项目,语音呼叫按钮,视频呼叫按钮和邀请按钮的这三个孩子,而我的条件是如果用户在数据库中可用,那么我只想显示语音/视频呼叫按钮并隐藏邀请按钮,但是如果用户无法使用,则我要显示邀请按钮并隐藏音频/视频通话按钮

ListView 列表显示

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/contacts_listview"/>

</RelativeLayout>

ListView Item ListView项目

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:minHeight="?android:attr/listPreferredItemHeight"
android:padding="16dp">

<ImageView
    android:id="@+id/contact_item_icon"
    android:layout_width="50dp"
    android:layout_height="50dp"/>

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical"
    android:paddingLeft="16dp">

    <TextView
        android:id="@+id/contact_item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Feel The Light" />


    <TextView
        android:id="@+id/contact_item_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Home" />



</LinearLayout>

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_user_audio_call_dark"/>

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_user_video_call_dark"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="30dp"
    android:text="Invite"
    android:background="@drawable/selector_button_green_oval"
    android:textColor="@color/white"/>

</LinearLayout>

ContactsFragment ContactsFragment

public class ContactsAdapter extends ArrayAdapter<ContactItem> {
private static final String LOG_TAG = ContactsAdapter.class.getSimpleName();

public ContactsAdapter(Activity context, List<ContactItem> contactItems) {
    super(context, 0, contactItems);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ContactItem contactItem = getItem(position);

    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.contact_list_item, parent, false);
    }

    ImageView contactImage = (ImageView) convertView.findViewById(R.id.contact_item_icon);
    contactImage.setImageResource(contactItem.contactImage);

    TextView contactName = (TextView) convertView.findViewById(R.id.contact_item_name);
    contactName.setText(contactItem.contactName);

    TextView contactNumber = (TextView) convertView.findViewById(R.id.contact_item_number);
    contactNumber.setText(contactItem.contactNumber);

    return convertView;
}
}

ContactsFragment ContactsFragment

public class ContactsListFragment extends Fragment {

private ContactsAdapter contactsAdapter;

public static ContactsListFragment newInstance() {
    return new ContactsListFragment();
}

public ContactsListFragment() {

}

ArrayList<String> contactName = new ArrayList<>();
ArrayList<String> contactNumber = new ArrayList<>();

ArrayList<ContactItem> contactsAvailable = new ArrayList<>();
ArrayList<ContactItem> contactsInvite = new ArrayList<>();

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);



    Cursor cursor = getActivity().getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null
    );

    String currentNumber = "";

    while (cursor.moveToNext()) {

        String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        number = number.replaceAll(" ", "");

        char c = number.charAt(0);
        char c1 = number.charAt(1);
        String s = Character.toString(c)+Character.toString(c1);

        if (s.equals("00")) {
            number = number.replaceAll("00", "+");
        }

        if (number.length() == 12) {
            number = "+" + number;
        }

        if (number.length() == 13) {
            if (!currentNumber.equals(number)) {
                contactName.add(name);
                contactNumber.add(number);
            }

        }

        currentNumber = number;

    }

}

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

    final View rootView = inflater.inflate(R.layout.fragment_contacts_list, container, false);

    QBPagedRequestBuilder pagedRequestBuilder = new QBPagedRequestBuilder();
    pagedRequestBuilder.setPage(1);
    pagedRequestBuilder.setPerPage(50);

    QBUsers.getUsersByLogins(contactNumber, pagedRequestBuilder, new QBEntityCallback<ArrayList<QBUser>>() {
        @Override
        public void onSuccess(ArrayList<QBUser> qbUsers, Bundle bundle) {
            for (int i = 0; i < qbUsers.size(); i++) {
                ContactItem contactItem = new ContactItem(qbUsers.get(i).getFullName(), qbUsers.get(i).getLogin(), R.drawable.ic_launcher);
                contactsAvailable.add(contactItem);

            }

            contactsAdapter = new ContactsAdapter(getActivity(), contactsAvailable);

            ListView listView = (ListView) rootView.findViewById(R.id.contacts_listview_available);
            listView.setAdapter(contactsAdapter);

        }

        @Override
        public void onError(QBResponseException e) {
            Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show();
        }
    });



    return rootView;

}
}

您可以在ContactItem类上添加一个标志,并将其设置为true或false(如果它在数据库中可用),然后根据此标志设置适配器中按钮的可见性。

Try this: 尝试这个:

  1. Add a boolean flag isAvailableInDB in your ContactItem.java class. ContactItem.java类中添加一个boolean标志isAvailableInDB
  2. Get contact list from your phonebook and check one by one with your server database . phonebook获取联系人列表,并与服务器database进行逐一检查。
  3. If a contactItem exist in your database just set flag isAvailableInDB as true oterwise false for that contactItem . 如果contactItem在你的存在database刚刚成立标志isAvailableInDBtrue oterwise falsecontactItem
  4. After that add contactItem to ArrayList 之后,将contactItem添加到ArrayList
  5. Create ContactsAdapter and set it to ListView 创建ContactsAdapter并将其设置为ListView
  6. Finally, add a condition in your adapter's getView() method to check the contactItem flag isAvailableInDB . 最后,在适配器的getView()方法中添加一个条件,以检查contactItem标志isAvailableInDB If true , show voice/video call button & hide invite button and if false , show invite button & hide voice/video call button. 如果为true ,则显示语音/视频呼叫按钮并隐藏邀请按钮;如果为false ,则显示邀请按钮并隐藏语音/视频呼叫按钮。

Give an id to XML button's: 给XML按钮的ID:

<ImageButton
    android:id="@+id/button_voice_call"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_user_audio_call_dark"/>

<ImageButton
    android:id="@+id/button_video_call"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_user_video_call_dark"/>

<Button
    android:id="@+id/button_invite"
    android:layout_width="wrap_content"
    android:layout_height="30dp"
    android:text="Invite"
    android:background="@drawable/selector_button_green_oval"
    android:textColor="@color/white"/>

In your adapter's getView() method: 在适配器的getView()方法中:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

ContactItem contactItem = getItem(position);

if (convertView == null) {
    convertView = LayoutInflater.from(getContext()).inflate(R.layout.contact_list_item, parent, false);
}

ImageView contactImage = (ImageView) convertView.findViewById(R.id.contact_item_icon);
contactImage.setImageResource(contactItem.contactImage);

TextView contactName = (TextView) convertView.findViewById(R.id.contact_item_name);
contactName.setText(contactItem.contactName);

TextView contactNumber = (TextView) convertView.findViewById(R.id.contact_item_number);
contactNumber.setText(contactItem.contactNumber);

ImageButton buttonVoiceCall= (ImageButton) convertView.findViewById(R.id.button_voice_call);
ImageButton buttonVideoCall= (ImageButton) convertView.findViewById(R.id.button_video_call);
Button buttonVoiceCall= (Button) convertView.findViewById(R.id.button_invite);

if(contactItem.getIsAvailableInDB())
{
     buttonVoiceCall.setVisibility(View.VISIBLE);
     buttonVideoCall.setVisibility(View.VISIBLE);
     buttonInvite.setVisibility(View.GONE);
}
else
{
     buttonVoiceCall.setVisibility(View.GONE);
     buttonVideoCall.setVisibility(View.GONE);
     buttonInvite.setVisibility(View.VISIBLE);
}
return convertView;
}

Hope this will help you~ 希望对您有帮助〜

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM