2015-11-28 22 views
-1

我在我的活動中有一個listView和圖標button。當點擊圖標時,應該去活動B並最終返回活動B值到A通過添加一個新列表。但現在的問題是我只能創建一個列表。當它有另一個值返回給A時,它將更新舊列表而不是添加新列表。爲什麼不能在listView中添加新列表?

我從here得到教程,不同的是我用startActivityForResult從活動B返回值A.

請幫me..I've在這裏一直停留了整整一天......

活動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; 

    } 

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; 
     } 
    } 

回答

0

目前代替ListView中增加新的項目,通過適配器的新對象setAdapter將在ListView中只顯示最新添加的項目,而不是添加在當前適配器。

做得一樣:

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(); 
} 

2.用途:

MyCustomBaseAdapter類爲數據源增加新的項目是從getCount方法返回的大小創建方法MyCustomBaseAdapter同類對象setAdapter方法第一次通過addNewItem方法:

if(requestCode==PROJECT_REQUEST_CODE) 
    { 
     MyCustomBaseAdapter objMyCustomBaseAdapter= 
         (MyCustomBaseAdapter)listview.getAdapter();  
    } 
+0

你能再次看到我的文章嗎?謝謝 – Hoo

+0

@Hoo:看到我的編輯答案 –

+0

您的意思是我需要在MyCustomBaseAdapter中添加'addNewItem()'嗎? – Hoo

相關問題