Android 将新列表添加到listView中

Android 将新列表添加到listView中,android,mysql,listview,android-listview,Android,Mysql,Listview,Android Listview,在活动a中有一个列表视图和一个添加按钮。listView数据是从MySQL检索的 [[ 单击列表时,它会将数据传递到活动B,如果单击添加按钮,它将转到活动B,供用户添加数据。我使用mClickedPosition来区分是单击了列表还是单击了按钮 活动A ListView listViewUpdate; ListAdapter adapter; Button add; String ID, iD; public static final int PROJECT

活动a中有一个
列表视图
和一个添加
按钮
listView
数据是从
MySQL
检索的

[[

单击列表时,它会将数据传递到活动B,如果单击添加
按钮
,它将转到活动B,供用户添加数据。我使用
mClickedPosition
来区分是单击了
列表
还是单击了
按钮

活动A

   ListView listViewUpdate;
    ListAdapter adapter;
    Button add;
    String ID, iD;
    public static final int PROJECT_REQUEST_CODE = 1;
    public static final int CAMERA_REQUEST_CODE = 2;
    int mClickedPosition;
    String ReceiveProject, ReceiveDescription, ReceiveTimeIn, ReceiveTimeOut;
    Integer ReceiveProgress;
    ArrayList<DetailsBean> results = new ArrayList<DetailsBean>();
    String myJSON;
    JSONArray details = null;
    ArrayList<HashMap<String, String>> EditDetails;

     listViewUpdate.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> listView, View view,
                                        int position, long id) {
                    mClickedPosition = position; // listView click
                    HashMap<String, String> clickedItem = EditDetails.get(position);
                    iD = clickedItem.get(Configs.TAG_ID);
                    Intent intent = new Intent(getActivity(), Edit_Details.class);
                    intent.putExtra("iD", iD);
                    intent.putExtra("ID", ID);
                    intent.putExtra("mClickedPosition",mClickedPosition);
                    //Toast.makeText(getActivity(),"This is"+iD+ID,Toast.LENGTH_LONG).show();
                    startActivityForResult(intent, PROJECT_REQUEST_CODE);

                }
            });


          add.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  mClickedPosition = -1;    // if button clicked
                  Intent intent = new Intent(getActivity(), Edit_Details.class);
                  intent.putExtra("ID", ID);
                  startActivity(intent);
              }

          });
活动A onActivityResult

  @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) { // receive from Activity B and populate ListView A
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == PROJECT_REQUEST_CODE) {
                ReceiveProject = data.getStringExtra("project1");
                ReceiveDescription = data.getStringExtra("description");
                ReceiveProgress = data.getIntExtra("progress", 0);
                ReceiveTimeIn = data.getStringExtra("timeIn");
                ReceiveTimeOut = data.getStringExtra("timeOut");


                Toast.makeText(getActivity(),ReceiveProject+ReceiveDescription+ReceiveProgress+ReceiveTimeIn+ReceiveTimeOut,Toast.LENGTH_LONG).show();
                if(mClickedPosition==-1)
                { // add list
                    HashMap<String, String> clickedItem = new HashMap<>();
                    clickedItem.put(Configs.TAG_PROJECT, ReceiveProject);
                    clickedItem.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
                    clickedItem.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
                    clickedItem.put(Configs.TAG_IN, ReceiveTimeIn);
                    clickedItem.put(Configs.TAG_OUT, ReceiveTimeOut);
                    EditDetails.add(clickedItem);
                    ((BaseAdapter) adapter).notifyDataSetChanged();

                }
                else
                {  // update list
                    HashMap<String, String> clickedItem =EditDetails.get(mClickedPosition);
                    clickedItem.put(Configs.TAG_PROJECT, ReceiveProject);
                    clickedItem.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
                    clickedItem.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
                    clickedItem.put(Configs.TAG_IN, ReceiveTimeIn);
                    clickedItem.put(Configs.TAG_OUT, ReceiveTimeOut);
                    ((BaseAdapter) adapter).notifyDataSetChanged();
                }
                //((BaseAdapter) adapter).notifyDataSetChanged();
            }
            }
    }
    }
@覆盖
activityresult(int-requestCode、int-resultCode、Intent-data)上的公共void{//从活动B接收并填充ListView A
if(resultCode==Activity.RESULT\u确定){
if(requestCode==项目\请求\代码){
ReceiveProject=data.getStringExtra(“项目1”);
ReceiveDescription=data.getStringExtra(“说明”);
ReceiveProgress=data.getIntExtra(“progress”,0);
ReceiveTimeIn=data.getStringExtra(“timeIn”);
ReceiveTimeOut=data.getStringExtra(“超时”);
Toast.makeText(getActivity(),ReceiveProject+ReceiveDescription+ReceiveProgress+ReceiveTimeIn+ReceiveTimeOut,Toast.LENGTH\u LONG).show();
如果(mClickedPosition==-1)
{//添加列表
HashMap clickedItem=新建HashMap();
单击编辑项放置(配置标记项目、接收项目);
点击编辑项放置(配置项工作描述、接收描述);
单击editem.put(Configs.TAG_PERCENTAGE,ReceiveProgress+);
单击editem.put(Configs.TAG_IN,ReceiveTimeIn);
单击编辑项输出(配置标记输出,接收超时);
编辑详细信息。添加(单击编辑项);
((BaseAdapter)adapter).notifyDataSetChanged();
}
其他的
{//更新列表
HashMap clickedItem=EditDetails.get(mClickedPosition);
单击编辑项放置(配置标记项目、接收项目);
点击编辑项放置(配置项工作描述、接收描述);
单击editem.put(Configs.TAG_PERCENTAGE,ReceiveProgress+);
单击editem.put(Configs.TAG_IN,ReceiveTimeIn);
单击编辑项输出(配置标记输出,接收超时);
((BaseAdapter)adapter).notifyDataSetChanged();
}
//((BaseAdapter)adapter).notifyDataSetChanged();
}
}
}
}
现在我可以看到活动a中添加的新列表。但是当我单击“新建”时 列表并转到活动B,不会传递任何数据。但是如果我单击旧的 列表中,我可以看到传递的数据


您需要在列表中添加或更新新数据,然后调用notifiDataSetChanged(); 更改活动A的onActivity结果方法中的代码,如下所示-

                HashMap<String, String> item =        new HashMap<>();
                item.put(Configs.TAG_PROJECT, ReceiveProject);
                item.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
                item.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
                item.put(Configs.TAG_IN, ReceiveTimeIn);
                item.put(Configs.TAG_OUT, ReceiveTimeOut);

                if(mClickedPosition==-1)
                { // add list
                    EditDetails.add(item);

                }
                else
                {  // update list
                    EditDetails.remove(mClickedPosition);
                    mEventsList.add(mClickedPosition,item)
                }
                ((BaseAdapter) adapter).notifyDataSetChanged();
HashMap item=newhashmap();
项。放置(配置标记项目、接收项目);
物品放置(配置标签、工作描述、接收描述);
item.put(Configs.TAG_百分比,ReceiveProgress+“”);
项。输入(配置标记,接收时间输入);
item.put(配置标记、接收超时);
如果(mClickedPosition==-1)
{//添加列表
编辑详细信息。添加(项目);
}
其他的
{//更新列表
EditDetails.remove(mClickedPosition);
mEventsList.add(mClickedPosition,项)
}
((BaseAdapter)adapter).notifyDataSetChanged();

为什么要使用两个适配器?ListAdapter;CustomBaseAdapter obj;?您正在将哪个适配器设置为ListView?@SanjeetAjnabee我已删除CustomBaseAdapter您应该创建一个对象类来包含所有数据,然后为其创建一个适配器。
ArrayAdapter
优先于
BaseAdapter
unless您需要特殊功能。@crick_007 ArrayList results=new ArrayList();?
HashMap item=new HashMap();
ReceiveTimeOut=data.getStringExtra(“timeOut”);?是的,在将其添加到列表na之前需要这些值。
EditDetails.remove(mClickedPosition)
mEventsList.add(mClickedPosition,item)
for?您需要更新列表中的值,我不确定更新特定位置上的HasMaps实例并调用notifyDataSetChanged()是否能正常工作。请使用我建议的方法bro!或在else和if block中移动操作。
                HashMap<String, String> item =        new HashMap<>();
                item.put(Configs.TAG_PROJECT, ReceiveProject);
                item.put(Configs.TAG_WORKDESCRIPTION, ReceiveDescription);
                item.put(Configs.TAG_PERCENTAGE, ReceiveProgress + "");
                item.put(Configs.TAG_IN, ReceiveTimeIn);
                item.put(Configs.TAG_OUT, ReceiveTimeOut);

                if(mClickedPosition==-1)
                { // add list
                    EditDetails.add(item);

                }
                else
                {  // update list
                    EditDetails.remove(mClickedPosition);
                    mEventsList.add(mClickedPosition,item)
                }
                ((BaseAdapter) adapter).notifyDataSetChanged();