GridView动态添加View

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.MainActivity">
    <GridView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/gridView"
        android:numColumns="4"></GridView>
</LinearLayout>

Article.java

package com.pingyijinren.helloworld.model;

/**
 * Created by Administrator on 2016/6/3 0003.
 */
public class Article {
    private int imageId;
    private String name;

    public Article(int imageId,String name){
        this.imageId=imageId;
        this.name=name;
    }

    public int getImageId() {
        return imageId;
    }

    public String getName() {
        return name;
    }
}

grid_item.xml

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

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

    <TextView
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:id="@+id/name"
        android:gravity="center"/>
</LinearLayout>

ArticleAdapter.java

package com.pingyijinren.helloworld.adapter;

import android.content.Context;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.pingyijinren.helloworld.R;
import com.pingyijinren.helloworld.model.Article;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/6/3 0003.
 */
public class ArticleAdapter extends ArrayAdapter<Article>{
    private ArrayList<Article> arrayListArticle;
    public ArticleAdapter(Context context, int resource, List<Article> objects) {
        super(context, resource, objects);
        arrayListArticle=(ArrayList<Article>) objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if(convertView==null){
            convertView= LayoutInflater.from(getContext()).inflate(R.layout.grid_item,null);
            viewHolder=new ViewHolder();
            viewHolder.image=(ImageView) convertView.findViewById(R.id.image);
            viewHolder.name=(TextView)convertView.findViewById(R.id.name);
            convertView.setTag(viewHolder);
        }
        else{
            viewHolder=(ViewHolder) convertView.getTag();
        }

        if(position<arrayListArticle.size()){
            Article article=getItem(position);
            viewHolder.image.setImageResource(article.getImageId());
            viewHolder.name.setText(article.getName());
        }
        else{
            viewHolder.image.setImageResource(R.drawable.plus);
            viewHolder.name.setText("");
        }

        return convertView;
    }

    private class ViewHolder{
        public ImageView image;
        public TextView name;
    }

    @Override
    public int getCount() {
        return arrayListArticle.size()+1;
    }
}
package com.pingyijinren.helloworld.adapter;

import android.content.Context;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.pingyijinren.helloworld.R;
import com.pingyijinren.helloworld.model.Article;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/6/3 0003.
 */
public class ArticleAdapter extends ArrayAdapter<Article>{
    private ArrayList<Article> arrayListArticle;
    public ArticleAdapter(Context context, int resource, List<Article> objects) {
        super(context, resource, objects);
        arrayListArticle=(ArrayList<Article>) objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if(convertView==null){
            convertView= LayoutInflater.from(getContext()).inflate(R.layout.grid_item,null);
            viewHolder=new ViewHolder();
            viewHolder.image=(ImageView) convertView.findViewById(R.id.image);
            viewHolder.name=(TextView)convertView.findViewById(R.id.name);
            convertView.setTag(viewHolder);
        }
        else{
            viewHolder=(ViewHolder) convertView.getTag();
        }

        if(position<arrayListArticle.size()){
            Article article=getItem(position);
            viewHolder.image.setImageResource(article.getImageId());
            viewHolder.name.setText(article.getName());
        }
        else{
            viewHolder.image.setImageResource(R.drawable.plus);
            viewHolder.name.setText("");
        }

        return convertView;
    }

    private class ViewHolder{
        public ImageView image;
        public TextView name;
    }

    @Override
    public int getCount() {
        return arrayListArticle.size()+1;
    }
}

MainActivity.java

package com.pingyijinren.helloworld.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;

import com.pingyijinren.helloworld.R;
import com.pingyijinren.helloworld.adapter.ArticleAdapter;
import com.pingyijinren.helloworld.model.Article;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private GridView gridView;
    private ArrayList<Article> arrayListArticle;
    private ArticleAdapter articleAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        gridView=(GridView)findViewById(R.id.gridView);
        arrayListArticle=new ArrayList<Article>();
        arrayListArticle.add(new Article(R.drawable.first_image,"frist"));
        arrayListArticle.add(new Article(R.drawable.second_image,"second"));
        articleAdapter=new ArticleAdapter(MainActivity.this,R.layout.grid_item,arrayListArticle);
        gridView.setAdapter(articleAdapter);

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if(position==arrayListArticle.size()){
                    arrayListArticle.add(new Article(R.drawable.third_image,"third"));
                    articleAdapter.notifyDataSetChanged();
                }
            }
        });
    }
}

 

转载于:https://www.cnblogs.com/zqxLonely/p/5555893.html

要在Android GridView动态添加列,可以遵循以下步骤: 1. 定义一个基本的GridView布局文件,包含GridView控件和适配器。 2. 创建一个数据源列表,用于存储GridView中要显示的数据。 3. 创建一个自定义适配器,该适配器用于将数据源列表中的数据绑定到GridView中的单元格中。 4. 在Activity或Fragment中,实例化GridView控件,并将自定义适配器设置为GridView的适配器。 5. 在需要动态添加列的时候,更新数据源列表,并调用适配器的notifyDataSetChanged()方法,以便GridView可以重新绘制。 6. 在适配器中,根据数据源列表的大小来确定GridView中应该显示的列数。可以使用GridView的setNumColumns()方法来设置列数。 以下是一个简单的示例代码,演示如何动态添加列到GridView中: ```java public class MainActivity extends AppCompatActivity { private GridView gridView; private CustomAdapter customAdapter; private List<String> dataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridView = findViewById(R.id.gridview); dataList = new ArrayList<>(); customAdapter = new CustomAdapter(dataList); gridView.setAdapter(customAdapter); // 动态添加一列 addColumn(); } private void addColumn() { // 更新数据源列表 dataList.add("New Column"); // 计算列数 int numColumns = (dataList.size() % 3 == 0) ? dataList.size() / 3 : (dataList.size() / 3) + 1; // 设置列数 gridView.setNumColumns(numColumns); // 刷新适配器 customAdapter.notifyDataSetChanged(); } class CustomAdapter extends BaseAdapter { private List<String> dataList; public CustomAdapter(List<String> dataList) { this.dataList = dataList; } @Override public int getCount() { return dataList.size(); } @Override public Object getItem(int position) { return dataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_item, parent, false); } TextView textView = convertView.findViewById(R.id.textview); textView.setText(dataList.get(position)); return convertView; } } } ``` 在上面的示例中,我们在Activity的onCreate()方法中,实例化了一个GridView控件和一个自定义适配器。然后,我们调用了addColumn()方法,该方法会更新数据源列表,计算出应该显示的列数,并设置到GridView中。最后,我们调用了适配器的notifyDataSetChanged()方法,以便GridView可以重新绘制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值