首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于水平CardView的定制CardView设计

基于水平CardView的定制CardView设计
EN

Stack Overflow用户
提问于 2017-03-25 09:58:23
回答 1查看 558关注 0票数 0
  • 在我的一个应用程序,我有以下的设计,为最喜爱的联系人。我正在从电话中获取最喜欢的联系人,并使用自定义列表适配器将它们显示为附加设计。但问题是,在这两个部分,接触都是重复的。例如,如果有八个最喜欢的联系人,那么它应该通过水平设置联系人来显示四行。但是它正在获取所有八个联系人,并在每一行中显示相同的联系人。
  • 希望我在澄清我的观点,我想要什么。这是我的代码,我知道我做错了什么。我尝试过无数种方法,但都没有用。

片段宠儿

代码语言:javascript
复制
public class FragmentFavourites extends Fragment{

ArrayList<String> name = new ArrayList<String>();
ArrayList<String> number = new ArrayList<String>();
ListView f_list;
String starred_id,starred_name,starred_number;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_favourites, container, false);
    f_list=(ListView)rootView.findViewById(R.id.fav_list);
    name.clear();
    number.clear();
    getFavourites();
    return rootView;

}

public void getFavourites()
{
    ContentResolver cr = getActivity().getApplicationContext().getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
            new String[]{ContactsContract.Contacts._ID,
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.Contacts.HAS_PHONE_NUMBER,
                    ContactsContract.Contacts.STARRED}, ContactsContract.Contacts.STARRED + "='1'", null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC");

    while (cur.moveToNext()) {

        starred_id = cur.getString(0);
        starred_name = cur.getString(1);
        name.add(starred_name);
        starred_number=getFavouriteNumber(starred_id);
        number.add(starred_number);

    }
    cur.close();

    FavouriteAdapter fa=new FavouriteAdapter(getActivity(),name,number);
    f_list.setAdapter(fa);
}

public String getFavouriteNumber(String contactId)
{
    ContentResolver cr = getActivity().getApplicationContext().getContentResolver();
    String phone=null;

    Cursor cursor = cr.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            null,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
            new String[]{contactId}, null);

    while (cursor.moveToNext())
    {
        phone=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    }

    cursor.close();
    return phone;
 }
}

FavouriteAdapter

代码语言:javascript
复制
public class FavouriteAdapter extends BaseAdapter{

Activity context;
ArrayList<String> f_name,f_number;
//String[] name1,name2,number1,number2;
TextView tf_name,tf_number,main_letter,tf_name_t,tf_number_t,main_letter_t;
int i;
int flag=1,count;

FavouriteAdapter(Activity context, ArrayList<String> fav_name, ArrayList<String> fav_number){

    this.context=context;
    this.f_name=fav_name;
    this.f_number=fav_number;
}

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

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {

    return i;
}

@Override
public View getView(final int position, View view, ViewGroup viewGroup) {

    LayoutInflater l=context.getLayoutInflater();
    View row=l.inflate(R.layout.favourite_adapter_layout,null,true);

    /*name1=new String[f_name.size()];
    name2=new String[f_name.size()];
    number1=new String[f_number.size()];
    number2=new String[f_number.size()];*/

    main_letter=(TextView)row.findViewById(R.id.main_letter);
    tf_name=(TextView) row.findViewById(R.id.favName);
    tf_number=(TextView)row.findViewById(R.id.favNumber);
    tf_name_t=(TextView)row.findViewById(R.id.favName_t);
    tf_number_t=(TextView)row.findViewById(R.id.favNumber_t);
    main_letter_t=(TextView)row.findViewById(R.id.main_letter_t);
    count=f_name.size();

    try {
        if(flag==1)
        {
        for (int i=0;i<f_name.size();i++){

            if(i==count) {

                flag=0;
                break;
            }

            if(i%2==0){
                    System.out.println("i in One: "+i);
                tf_name.setText(f_name.get(position));
                tf_number.setText(f_number.get(position));
                if (!f_name.get(position).isEmpty()) {
                    String init = f_name.get(position).substring(0, 1);
                    main_letter.setText(init);
                }

            }
            else{
                System.out.println("i in Two: "+i);
                tf_name_t.setText(f_name.get(position));
                tf_number_t.setText(f_number.get(position));
                if (!f_name.get(position).isEmpty()) {
                    String init = f_name.get(position).substring(0, 1);
                    main_letter_t.setText(init);

            }
        }

    }}}
    catch (Exception e){
        System.out.println(e);
    }
    return row;
 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-27 07:20:53

我用GridView代替ListView来解决我的问题。这是我的代码。希望它能帮到别人。

FragmentFavourites

代码语言:javascript
复制
    public class FragmentFavourites extends Fragment{

ArrayList<String> name = new ArrayList<String>();
ArrayList<String> number = new ArrayList<String>();
GridView f_list;
String starred_id,starred_name,starred_number;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_favourites, container, false);
    f_list=(GridView) rootView.findViewById(R.id.grid);
    name.clear();
    number.clear();
    try
    {
        new GetFavouriteTask().execute();
    }
    catch(Exception e)
    {
        Toast.makeText(getActivity(),"Problem Loading Contacts",Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }
    return rootView;

}

public class GetFavouriteTask extends AsyncTask<Void,Void,Void>{

    @Override
    protected Void doInBackground(Void... params) {
        getFavourites();
        return null;
    }
    @Override
    protected void onPostExecute(Void result)
    {
        try {
            FavouriteAdapter fa=new FavouriteAdapter(getActivity(),name,number);
            f_list.setAdapter(fa);
        }
        catch(Exception e){
            System.out.println(e);
        }

    }
}

public void getFavourites()
{
    ContentResolver cr = getActivity().getApplicationContext().getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
            new String[]{ContactsContract.Contacts._ID,
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.Contacts.HAS_PHONE_NUMBER,
                    ContactsContract.Contacts.STARRED}, ContactsContract.Contacts.STARRED + "='1'", null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC");

    while (cur.moveToNext()) {

        starred_id = cur.getString(0);
        starred_name = cur.getString(1);
        name.add(starred_name);
        starred_number=getFavouriteNumber(starred_id);
        number.add(starred_number);

    }
    cur.close();
}

public String getFavouriteNumber(String contactId)
{
    ContentResolver cr = getActivity().getApplicationContext().getContentResolver();
    String phone=null;

    Cursor cursor = cr.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            null,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
            new String[]{contactId}, null);

    while (cursor.moveToNext())
    {
        phone=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    }

    cursor.close();
    return phone;
}
}

FavouriteAdapter

代码语言:javascript
复制
    public class FavouriteAdapter extends BaseAdapter{

Activity context;
ArrayList<String> f_name,f_number;
TextView tf_name,tf_number,main_letter;
int i;

FavouriteAdapter(Activity context, ArrayList<String> fav_name, ArrayList<String> fav_number){
    this.context=context;
    this.f_name=fav_name;
    this.f_number=fav_number;
}

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

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {

    return i;
}

@Override
public View getView(final int position, View view, ViewGroup viewGroup) {

    LayoutInflater l=context.getLayoutInflater();
    View row=l.inflate(R.layout.favourite_adapter_layout,null,true);


    main_letter=(TextView)row.findViewById(R.id.main_letter);
    tf_name=(TextView) row.findViewById(R.id.favName);
    tf_number=(TextView)row.findViewById(R.id.favNumber);

    try {
                tf_name.setText(f_name.get(position));
                tf_number.setText(f_number.get(position));
                if (!f_name.get(position).isEmpty()) {
                    String init = f_name.get(position).substring(0, 1);
                    main_letter.setText(init);
                }}
    catch (Exception e){
        System.out.println(e);
    }
    return row;
}
 }

fragment_favourites.xml

代码语言:javascript
复制
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<GridView
    android:id="@+id/grid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:verticalSpacing="0dp"
    android:horizontalSpacing="0dp"
    android:stretchMode="columnWidth"
    android:numColumns="2"/>
   </RelativeLayout>

favourite_adapter_layout

代码语言:javascript
复制
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >


    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:cardElevation="6dp"
        app:cardUseCompatPadding="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginStart="20dp"
        android:layout_marginEnd="20dp"
        app:cardBackgroundColor="#02605c"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ffffff"
                android:textSize="60dp"
                android:layout_gravity="center"
                android:padding="5dp"
                android:id="@+id/main_letter"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ffffff"
                android:textSize="15dp"
                android:layout_marginStart="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginEnd="10dp"
                android:id="@+id/favName"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#ffffff"
                android:layout_marginStart="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginEnd="10dp"
                android:id="@+id/favNumber"
                />
        </LinearLayout>
    </android.support.v7.widget.CardView>
     </LinearLayout>
    </RelativeLayout>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43014981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档