Android 为什么不能在listView中添加新列表?

Android 为什么不能在listView中添加新列表?,android,listview,android-listview,Android,Listview,Android Listview,我的活动中有一个列表视图和图标按钮。单击图标时,它应转到活动B,最后通过添加新列表将活动B值返回到A。但现在的问题是我只能创建一个列表。当它将另一个值返回到时,它将更新旧列表,而不是添加新列表 我从中获得教程,不同之处在于我使用startActivityForResult将值从活动B返回到A 请帮帮我…我在这里呆了一整天 活动A int mClickedPosition; // add list @Override public boolean onOptionsItemSele

我的活动中有一个
列表视图
和图标
按钮
。单击图标时,它应转到活动B,最后通过添加新列表将活动B值返回到A。但现在的问题是我只能创建一个列表。当它将另一个值返回到时,它将更新旧列表,而不是添加新列表

我从中获得教程,不同之处在于我使用
startActivityForResult
将值从活动B返回到A

请帮帮我…我在这里呆了一整天

活动A

 int mClickedPosition; // add list

  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.addDetails:
                View menuItemView = findViewById(R.id.addDetails);
                PopupMenu po = new PopupMenu(this, menuItemView); //for drop-down menu
                po.getMenuInflater().inflate(R.menu.popup_details, po.getMenu());
                po.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                Toast.makeText(getApplication(), "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show();
                if ("Add Work Details".equals(item.getTitle())) {
                mClickedPosition = -1;
                Intent intent = new Intent(getApplication(), Add_Details_Information.class);  // go to Details class
                startActivityForResult(intent, PROJECT_REQUEST_CODE);
                }
                   return true;
                   }
                });
                po.show(); //showing popup menu
             }
                 return super.onOptionsItemSelected(item);

    }

  @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) { // receive from Add_Details_Information
       if(requestCode==PROJECT_REQUEST_CODE)
       {
                ReceiveProject = data.getStringExtra("Project");
                ReceiveDescription = data.getStringExtra("Description");
                ReceiveProgress = data.getIntExtra("progress",0);
                ReceiveTimeIn = data.getStringExtra("TimeIn");
                ReceiveTimeOut = data.getStringExtra("TimeOut");
                ArrayList<SearchResults> searchResults = GetSearchResults(ReceiveProject, ReceiveDescription, ReceiveProgress, ReceiveTimeIn, ReceiveTimeOut);
                (new MyCustomBaseAdapter(this,searchResults)).notifyDataSetChanged();
                listview.setAdapter(new MyCustomBaseAdapter(this,searchResults));
        }
        else if(requestCode==CAMERA_REQUEST_CODE)
       {

       }
    }

    private ArrayList<SearchResults> GetSearchResults(String p, String d,int pro, String i, String o) {
        ArrayList<SearchResults> results = new ArrayList<SearchResults>();
        SearchResults sr1=new SearchResults();
        sr1.setProject(" Project/Service/Training : " + p);
        sr1.setDescription(" Description : " + d);
        sr1.setProgress(" Progress : " + pro);
        sr1.setTimeIn(" Time In : " + i);
        sr1.setTimeOut(" Time Out : " + o);
        if(mClickedPosition==-1)
        {
            results.add(sr1);
        }
        return results;

    }
int mClickedPosition;//添加列表
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.Add详细信息:
View menuItemView=findViewById(R.id.addDetails);
PopupMenu po=新建PopupMenu(此,menuItemView);//用于下拉菜单
po.getMenuInflater().充气(R.menu.pop_详细信息,po.getMenu());
po.setOnMenuItemClickListener(新弹出菜单.OnMenuItemClickListener(){
公共布尔onMenuItemClick(菜单项){
Toast.makeText(getApplication(),“您单击的:”+item.getTitle(),Toast.LENGTH\u SHORT.show();
if(“添加工作细节”.equals(item.getTitle())){
mClickedPosition=-1;
Intent Intent=new Intent(getApplication(),Add_Details_Information.class);//转到Details类
startActivityForResult(意图、项目请求代码);
}
返回true;
}
});
po.show();//显示弹出菜单
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
activityresult(int请求代码、int结果代码、意图数据)上的公共void{//receive from Add\u Details\u信息
if(requestCode==项目\请求\代码)
{
ReceiveProject=data.getStringExtra(“项目”);
ReceiveDescription=data.getStringExtra(“说明”);
ReceiveProgress=data.getIntExtra(“progress”,0);
ReceiveTimeIn=data.getStringExtra(“TimeIn”);
ReceiveTimeOut=data.getStringExtra(“超时”);
ArrayList searchResults=GetSearchResults(ReceiveProject、ReceiveDescription、ReceiveProgress、ReceiveTimeIn、ReceiveTimeOut);
(新的MyCustomBaseAdapter(this,searchResults)).notifyDataSetChanged();
setAdapter(新的MyCustomBaseAdapter(这是searchResults));
}
else if(requestCode==摄像机请求码)
{
}
}
私有ArrayList GetSearchResults(字符串p、字符串d、int-pro、字符串i、字符串o){
ArrayList结果=新建ArrayList();
SearchResults sr1=新的SearchResults();
sr1.setProject(“项目/服务/培训:”+p);
sr1.设置说明(“说明:+d”);
sr1.设置进度(“进度:+pro”);
sr1.setTimeIn(“时间输入:+i”);
sr1.设置超时(“超时:+o”);
如果(mClickedPosition==-1)
{
结果:添加(sr1);
}
返回结果;
}
MyCustomBaseAdapter

public class MyCustomBaseAdapter extends BaseAdapter{   // for ListView in WorkDetailsTable


        private static ArrayList<SearchResults> searchArrayList;

        private LayoutInflater mInflater;

        public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
            searchArrayList = results;
            mInflater = LayoutInflater.from(context);
        }

        public int getCount() {
            return searchArrayList.size();
        }

        public Object getItem(int position) {
            return searchArrayList.get(position);
        }

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

        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.custom_row_view, null);
                holder = new ViewHolder();
                holder.txtProject= (TextView) convertView.findViewById(R.id.ListProject);
                holder.txtDescription = (TextView) convertView.findViewById(R.id.ListDescription);
                holder.txtProgress = (TextView) convertView.findViewById(R.id.ListProgress);
                holder.txtIn=(TextView)convertView.findViewById(R.id.ListTimeIn);
                holder.txtOut=(TextView)convertView.findViewById(R.id.ListTimeOut);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.txtProject.setText(searchArrayList.get(position).getProject());
            holder.txtDescription.setText(searchArrayList.get(position).getDescription());
            holder.txtProgress.setText(searchArrayList.get(position).getProgress());
            holder.txtIn.setText(searchArrayList.get(position).getTimeIn());
            holder.txtOut.setText(searchArrayList.get(position).getTimeOut());

            return convertView;
        }

        static class ViewHolder {
            TextView txtProject;
            TextView txtDescription;
            TextView txtProgress;
            TextView txtIn;
            TextView txtOut;
        }
    }
公共类MyCustomBaseAdapter为WorkDetailsTable中的ListView扩展了BaseAdapter{//
私有静态ArrayList searchArrayList;
私人停车场;
公共MyCustomBaseAdapter(上下文、ArrayList结果){
searchArrayList=结果;
mInflater=LayoutInflater.from(上下文);
}
public int getCount(){
返回searchArrayList.size();
}
公共对象getItem(int位置){
返回searchArrayList.get(位置);
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
convertView=mInflater.充气(R.layout.custom_row_view,null);
holder=新的ViewHolder();
holder.txtProject=(TextView)convertView.findViewById(R.id.ListProject);
holder.txtDescription=(TextView)convertView.findViewById(R.id.ListDescription);
holder.txtProgress=(TextView)convertView.findViewById(R.id.ListProgress);
holder.txtIn=(TextView)convertView.findViewById(R.id.ListTimeIn);
holder.txtOut=(TextView)convertView.findViewById(R.id.ListTimeOut);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.txtProject.setText(searchArrayList.get(position.getProject());
holder.txtDescription.setText(searchArrayList.get(position.getDescription());
holder.txtProgress.setText(searchArrayList.get(position.getProgress());
holder.txtIn.setText(searchArrayList.get(position.getTimeIn());
holder.txtOut.setText(searchArrayList.get(position.getTimeOut());
返回视图;
}
静态类视窗夹{
TextView TXT项目;
TextView txtDescription;
TextView txtProgress;
TextView-txtIn;
TextView-txtOut;
}
}

当前,而不是在ListView中添加新项,将适配器的新对象传递给
setAdapter
,后者将仅在ListView中显示最新添加的项,而不是在当前适配器中添加

按如下方式操作:

1.
MyCustomBaseAdapter
类中创建一个方法,用于在数据源中添加新项,该项的大小从
getCount
方法返回:

public void addNewItem(String ReceiveProject,String ReceiveDescription,...){
  // add ReceiveProject,ReceiveDescription 
  // in ArrayList which using in Adapter

  SearchResults objSearchResults=new SearchResults();
  objSearchResults.setProject(ReceiveProject);
  ....
  searchArrayList.add(objSearchResults);
  this. notifyDataSetChanged();
}
if(requestCode==PROJECT_REQUEST_CODE)
   {
      MyCustomBaseAdapter objMyCustomBaseAdapter=
                      (MyCustomBaseAdapter)listview.getAdapter();     
   }
2.使用与
MyCustomBaseAdapter相同的对象