使用ArrayAdapter设置带有自定义视图的GridView

时间:2016-12-11 18:38:13

标签: android gridview android-arrayadapter android-custom-view custom-adapter

我想设置一个带有GridView的Activity,它具有使用ArrayAdapter添加的自定义视图,但在模拟器上gridview不显示任何内容,这里是我的代码

带Gridview的活动

public class ContactActivity extends AppCompatActivity{
@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.contact_activity);
    GridView gv = (GridView) findViewById(R.id.gv);
    Contact c1 = new Contact(1,"a","ab","01","a@outlook.fr");
    Contact c2 = new Contact(2,"b","cd","02","b@outlook.fr");
    Contact c3 = new Contact(3,"c","ef","03","c@outlook.fr");
    Contact c4 = new Contact(4,"d","gh","04","d@outlook.fr");
    Contact c5 = new Contact(5,"e","ij","05","e@outlook.fr");

    List<Contact> listc = new ArrayList<>();
    listc.add(c1);
    listc.add(c2);
    listc.add(c3);
    listc.add(c4);
    listc.add(c5);
    ContactAdapter ca = new ContactAdapter(this, R.layout.item, listc);
    gv.setAdapter(ca);
    Intent intent = getIntent();
    final Intent i = new Intent(this, AjouterContactActivity.class);
    FloatingActionButton a = (FloatingActionButton) findViewById(R.id.fab);
    a.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(i);
        }
    });
}}

扩展ArrayAdapter的类

public class ContactAdapter extends ArrayAdapter {
List<Contact> items;
int viewResourecId;

public ContactAdapter(Context context, int viewResourecId, List<Contact> items) {
    super(context,viewResourecId);
    this.viewResourecId=viewResourecId;
    this.items=items;
}

@Override
public int getCount() {
    return 0;
}



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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View itemView= convertView;
    if(convertView==null){
        LayoutInflater inflater1 = (LayoutInflater) ((ContactActivity)getContext()).getLayoutInflater();
        itemView = inflater1.inflate(viewResourecId,parent,false);
    }
    TextView tv1 = (TextView)itemView.findViewById(R.id.name);
    TextView tv2 = (TextView)itemView.findViewById(R.id.cap);
    tv2.setText(items.get(position).getNom().charAt(0));
    tv1.setText(items.get(position).getNom()+"         "+items.get(position).getPrenom());
    return itemView;
   }}

自定义项目布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
    android:layout_width="192dp"
    android:layout_height="50dp"
    android:id="@+id/cap"
    android:gravity="center|top"
    />
<TextView
    android:layout_width="192dp"
    android:layout_height="10dp"
    android:id="@+id/name"
    android:layout_below="@+id/cap"
    android:gravity="center|bottom"
    />
 </RelativeLayout> 

Here's an image of the acticivity

1 个答案:

答案 0 :(得分:0)

您需要为getCount和getItemId方法提供一些代码。例如:

DECLARE @Invoices AS TABLE (InvoiceNo INT, dateIssues DATETIME)
INSERT INTO @Invoices VALUES
(1,'2016-10-30 00:00:00.000')
,(2,'2016-12-01 00:00:00.000')
,(3,'2016-11-03 00:00:00.000')
,(4,'2016-11-24 00:00:00.000')
,(5,'2016-09-09 00:00:00.000')

DECLARE @N INT = 20

SELECT
    *
FROM
    @Invoices
WHERE
    dateIssues >=
    CASE WHEN DAY(GETDATE()) < @N
       THEN DATEADD(MONTH,-1,DATEADD(DAY,1 - DAY(GETDATE()),CAST(GETDATE() AS DATE))) --beginning of last month
       ELSE DATEADD(DAY,1 - DAY(GETDATE()),CAST(GETDATE() AS DATE))  --beginning of this month
    END