【问题标题】:Add Data into Listview Runtime using Custom Adapter使用自定义适配器将数据添加到 Listview 运行时
【发布时间】:2016-04-21 06:57:24
【问题描述】:

问题:当我点击添加按钮时,所有数据都被清除,只显示一个项目......我想显示旧项目以及新添加的项目......

这是我的代码.....

模型类

public class GroupModel {
    ArrayList<String> G_member=new ArrayList<String>();
    ArrayList<String> G_name = new ArrayList<String>();


    public ArrayList<String> getG_member() {
        return G_member;
    }

    public void setG_member(ArrayList<String> g_member) {
        G_member = g_member;
    }
    public void addToGmember(String gname){
        this.G_member.add(gname);
    }

    public ArrayList<String> getG_name() {
        return G_name;
    }

    public void setG_name(ArrayList<String> g_name) {
        G_name = g_name;
    }
    public void addToGname(String name){
        this.G_name.add(name);
    }
}

主要活动

public class MainActivity extends ActionBarActivity {

    Context context=this;
    private ListView lv;
    ImageView plus_img;// plus button to add GROUP Runtime.
    GroupModel model = new GroupModel();
    GroupAdapter adapter;
    ListView myListView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.group__listview);
        myListView = lv;
        //plus image
        plus_img = (ImageView) findViewById(R.id.add_img);
        plus_img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                model.addToGname("jignesh");
                model.addToGmember("8");
                ArrayList<GroupModel> l = new ArrayList<GroupModel>();
                l.add(model);
           //     adapter.setListData(getListData());
                myListView.setAdapter(new GroupAdapter(context, l));
            //    adapter.notifyDataSetChanged();
            }
        });


        adapter= new GroupAdapter(context,getListData());
        lv.setAdapter(adapter);

}

    private ArrayList getListData() {
        ArrayList list = new ArrayList();
        int untilloop;

        if(model.getG_member().size()>10)
        {
            untilloop = model.getG_member().size();
            for (int i=0;i<untilloop;i++)
            {
                model.getG_member();
                model.getG_name();
                list.add(model);
            }
        }
        else{
            untilloop=10;
            for(int i = 0; i <untilloop; i++){
                model.getG_name().add("raj "+i );
                model.getG_member().add(""+i);
                list.add(model);
            }
        }

        return list;
    }
}

适配器类

public class GroupAdapter extends BaseAdapter {
    ArrayList<GroupModel> glist;
    Context context;
    private LayoutInflater layoutInflater;

    public GroupAdapter(Context mainActivity, ArrayList<GroupModel> glist) {
        context = mainActivity;
        this.glist=glist;
        layoutInflater = LayoutInflater.from(context);
    }
    public void setListData(ArrayList<GroupModel> data){
        glist = data;
    }

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

    @Override
    public Object getItem(int position) {
        return glist.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView==null){
         //  LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            convertView = layoutInflater.inflate(R.layout.row_list_data,null);
            holder= new ViewHolder();
            holder.g_number=(TextView)convertView.findViewById(R.id.txt_g_number);
            holder.g_name=(TextView)convertView.findViewById(R.id.txt_g_name);
            holder.nxt_aerrow=(ImageView)convertView.findViewById(R.id.img_nxt);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.g_number.setText(glist.get(position).getG_member().get(position).toString());
        holder.g_name.setText(glist.get(position).getG_name().get(position).toString());

        holder.nxt_aerrow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,"image click",Toast.LENGTH_SHORT).show();
            }
        });
        return convertView;
    }
    static class ViewHolder {
        TextView g_number,g_name;
        ImageView nxt_aerrow;
    }
}

【问题讨论】:

  • 在 OnClick 中,您正在创建数组对象并将其传递给您的适配器将每次只创建行。在全局级别创建该数组列表并在其中添加您的组成员。希望能解决您的问题
  • 谢谢回复,,,,OnClick的时候想加一行...
  • 我没有让你@Drup Desai..
  • 好的,然后将 Arraylist 声明为全局变量并在其中添加您的组成员。

标签: java android listview baseadapter


【解决方案1】:

试试这个在适配器中添加方法:

public void addItem(GroupModel groupModel){
   yourList.add(groupModel);
  notifyDataSetChanged();
}

On Click 方法执行此操作,

plus_img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                model.addToGname("jignesh");
                model.addToGmember("8");

                adapter.addItem(model);
            }
        });

【讨论】:

  • 是的..它的工作...现在我想删除任何特定项目,如果长按...那么我该如何实现?
  • @RjzSatvara 每个帖子一个问题,请。您发布的问题已得到解答。如果您还有其他问题,请发布一个新问题。更好的是,先搜索。这个问题之前肯定已经在这里回答过了。
【解决方案2】:

你的ListView 总是有一个元素,因为每次你点击add button,你都会创建一个新的ArrayList 然后你添加一个元素到你的ArrayList => 你的ArrayList 总是有一个元素= > 你的ListView 总是有一件物品

所以只需将ArrayList&lt;GroupModel&gt; l = new ArrayList&lt;GroupModel&gt;(); 移到plus_img.setOnClickListener(new View.OnClickListener() 之外

...
ArrayList<GroupModel> l = new ArrayList<GroupModel>();
...
plus_img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               ...
            }
});

【讨论】:

  • setOnClickListener里面,你能不能写一个logcat来打印ArrayList size。然后告诉我当你按下添加按钮时数组大小是否正确增加
【解决方案3】:

在您的活动中尝试以下代码。

public class MainActivity extends ActionBarActivity {

Context context=this;
private ListView lv;
ImageView plus_img;// plus button to add GROUP Runtime.
GroupModel model = new GroupModel();
GroupAdapter adapter;
ListView myListView;
ArrayList<GroupModel> l = new ArrayList<GroupModel>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lv = (ListView) findViewById(R.id.group__listview);
    myListView = lv;
    //plus image
    plus_img = (ImageView) findViewById(R.id.add_img);
    plus_img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            model.addToGname("jignesh");
            model.addToGmember("8");
            l.add(model);
       //     adapter.setListData(getListData());
            myListView.setAdapter(new GroupAdapter(context, l));
        //    adapter.notifyDataSetChanged();
        }
    });


    adapter= new GroupAdapter(context,getListData());
    lv.setAdapter(adapter);

}

private ArrayList getListData() {
    ArrayList list = new ArrayList();
    int untilloop;

    if(model.getG_member().size()>10)
    {
        untilloop = model.getG_member().size();
        for (int i=0;i<untilloop;i++)
        {
            model.getG_member();
            model.getG_name();
            list.add(model);
        }
    }
    else{
        untilloop=10;
        for(int i = 0; i <untilloop; i++){
            model.getG_name().add("raj "+i );
            model.getG_member().add(""+i);
            list.add(model);
        }
    }

    return list;
}
}

【讨论】:

    【解决方案4】:

    适配器=新组适配器(上下文,getListData()); lv.setAdapter(适配器);

    如果你观察到这一行,你正在设置 getListData() 返回的任何内容......所以声明一个新的全局列表,然后执行以下操作

    globalList.addAll(getListData());
    adapter= new GroupAdapter(context,globalList);
    

    现在您可以保留旧数据和新数据...您可以维护一个新列表,其中包含所有数据...并使用该“globalList”进行操作

    谢谢

    【讨论】:

      猜你喜欢
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多