【问题标题】:Setting up a GridView with custom views using an ArrayAdapter使用 ArrayAdapter 设置带有自定义视图的 GridView
【发布时间】:2016-12-11 18:38:12
【问题描述】:

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

带有 Gridview 的 Activity

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

【问题讨论】:

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


    【解决方案1】:

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

    @Override
    public int getCount() {
        return items.size();
    }
    
    
    
    @Override
    public long getItemId(int position) {
        return position;
    }
    

    【讨论】:

    • 现在它崩溃了,而不是什么都不显示
    • 你的崩溃是什么?我认为这是items 上的 NullPointerException。你需要初始化它:List&lt;Contact&gt; items = new ArrayList&lt;&gt;();。你可能需要调用 notifyDataSetChanged();如果您没有显示任何内容(但我不确定),请在构造函数的末尾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多