2015-11-02 75 views
3

我使用的是導航抽屜有三個項目(考勤表,索賠,項目),我想通過ab權利要求。在考勤表我有3個活動中,ab在work_details activity.How能做些什麼來實現這一目標?如何將數據傳遞給導航抽屜項目?

的TimeSheet有3個活動(信息(擴展到片段),工作力,工作詳情)

要求有2個活動(權利要求書(延伸到片段),cameraMain)。

WorkDetails.java

Button btn1 = (Button) findViewById(R.id.button2); 
    btn1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(WorkDetailsTable.this); 
       builder.setTitle("Data Saved"); 
       builder.setMessage("Are you sure you want to save?"); 
       builder.setIcon(android.R.drawable.ic_dialog_alert); 
       builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int ii) { 
       long ab = ts.insertTimeSheet(name, weather, date, status,b,i);   
       Bundle bundle =new Bundle(); 
       bundle.putString("ab","ab"); 
       Claims o=new Claims(); 
       o.setArguments(bundle); 
} 

Claims.java

final Long fk=this.getArguments().getLong("ab"); 
Button button = (Button) claims.findViewById(R.id.button8); 
button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       Intent intent = new Intent(getActivity().getApplicationContext(), CameraMain.class); 
       Toast.makeText(getActivity().getApplicationContext(), fk+"", Toast.LENGTH_LONG).show(); 
       startActivity(intent); 
      } 
     }); 
     return claims; 
    } 

我從Send data from activity to fragment in android參考,但是當我選擇的權利要求項的應用程序崩潰。

9月11日至2日:25:55.910 6116-6116/com.example.project.project E/AndroidRuntime:致命異常:主 工藝:com.example.project.project,PID:6116 的java .lang.NullPointerException at com.example.project.project.Claims.onCreateView(Claims.java:59) at android.app.Fragment.performCreateView(Fragment.java:1700) at android.app.FragmentManagerImpl.moveToState( FragmentManager.java:890) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) at android.app.BackStackRecord.run(BackStackRecord.java:684) 在android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1453)

我覺得NullPointException從這裏走來

FK = data.getLong( 「AB」);

我是否需要添加參數在MainActivity?

MainActivity.java

代碼段在mainActivity

private void selectItem(int position) { 

      Fragment fragment = null; 

      switch (position) { 
       case 0: 
        fragment=new Information(); 
        break; 
       case 1: 
        fragment=new Claims(); 
        break; 

       case 2: 
        fragment=new Project(); 

       case 3: 
        fragment=new Report(); 

       case 4: 
        fragment=new ViewView(); 

       default: 
        break; 
      } 

      if (fragment != null) { 
       FragmentManager fragmentManager = getFragmentManager(); 
       fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

       mDrawerList.setItemChecked(position, true); 
       mDrawerList.setSelection(position); 
       setTitle(mNavigationDrawerItemTitles[position]); 
       mDrawerLayout.closeDrawer(mDrawerList); 

      } else { 
       Log.e("MainActivity", "Error in creating fragment"); 
      } 

一些部分EDITED

Button btn1 = (Button) findViewById(R.id.button2); 
     btn1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(WorkDetailsTable.this); 
       builder.setTitle("Data Saved"); 
       builder.setMessage("Are you sure you want to save?"); 
       builder.setIcon(android.R.drawable.ic_dialog_alert); 
       builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int ii) { 
       long ab = ts.insertTimeSheet(name, weather, date, status,b,i); 
       Bundle bundle =new Bundle(); 
       bundle.putLong("ab",ab); 
       Claims o=new Claims(); 
       o.setArguments(bundle); 
       } 

權利要求。的java

Bundle bundle=this.getArguments(); 
    fk=bundle.getLong("ab"); 
    button1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getActivity().getApplicationContext(), fk+"", Toast.LENGTH_LONG).show(); 
       AlertDialogRadio(a1); 


      } 
     }); 

MainActivity

private void selectItem(int position) { 

      Fragment fragment = null; 

      switch (position) { 
       case 0: 
        fragment=new Information(); 
        break; 
       case 1: 
        fragment=new Claims(); 
        break; 

       case 2: 
        fragment=new Project(); 
        break; 

       case 3: 
        fragment=new Report(); 
        break; 

       case 4: 
        fragment=new ViewView(); 

       default: 
        break; 
      } 

      if (fragment != null) { 
       FragmentManager fragmentManager = getFragmentManager(); 
       if(fragment instanceof Claims) 
       { 
        Bundle bundle=new Bundle(); 
        bundle.putString("ab","ab"); 
        fragment.setArguments(bundle); 
        fragment.setArguments(bundle); 
       } 

       fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

       mDrawerList.setItemChecked(position, true); 
       mDrawerList.setSelection(position); 
       setTitle(mNavigationDrawerItemTitles[position]); 
       mDrawerLayout.closeDrawer(mDrawerList); 

      } else { 
       Log.e("MainActivity", "Error in creating fragment"); 
      } 
     } 
    } 
+0

在WorkDetails'索賠fragobj =新的索賠();'會發生什麼呢?您似乎將參數設置在您不使用的對象上。嘗試設置來自Activity的參數,因爲這似乎是您添加片段的位置。 –

+0

'我需要在MainActivity中添加參數嗎?' 是的,如果那是您創建片段並將其添加到片段管理器的地方。 –

+0

@MarkusMaga hi..sorry,我不明白。我應該在'MainActivity'中寫入什麼,以便'ab'可以傳遞給'Claims.java'?在fragment = new Claims()之後的 – Hoo

回答

1

MainActivity

private void selectItem(int position) { 

     Fragment fragment = null; 

     switch (position) { 
      case 0: 
       fragment=new Information(); 
       break; 
      case 1: 
       fragment=new Claims(); 
       Bundle bundle=new Bundle(); 
       bundle.putLong("ab",WorkDetails.ab); 
       fragment.setArguments(bundle); 
       break; 

      case 2: 
       fragment=new Project(); 
       break; 

      case 3: 
       fragment=new Report(); 
       break; 

      case 4: 
       fragment=new ViewView(); 

      default: 
       break; 
     } 

     if (fragment != null) { 
      FragmentManager fragmentManager = getFragmentManager(); 

      fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

      mDrawerList.setItemChecked(position, true); 
      mDrawerList.setSelection(position); 
      setTitle(mNavigationDrawerItemTitles[position]); 
      mDrawerLayout.closeDrawer(mDrawerList); 

     } else { 
      Log.e("MainActivity", "Error in creating fragment"); 
     } 
    } 
} 

WorkDetails

public static long ab=-1;//this is flied ,don't put in the method 



Button btn1 = (Button) findViewById(R.id.button2); 
btn1.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View arg0) { 
    AlertDialog.Builder builder = new  AlertDialog.Builder(WorkDetailsTable.this); 
    builder.setTitle("Data Saved"); 
    builder.setMessage("Are you sure you want to save?"); 
      builder.setIcon(android.R.drawable.ic_dialog_alert); 
      builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int ii) { 
      ab = ts.insertTimeSheet(name, weather, date, status,b,i);   

} 
1

你可以做的只是將這些數據放在放置片段的活動中。例子是。

您的活動 long ab = 12.4;

in your fragment long data =((YourActivity)getActivity())。ab;

 "OR" 

使AB像

static long ab = value; // your Details activity 
您的詳細信息活動

,並獲得該

,詳情活動名稱值一樣

long data = Details.ab //in your claims activity.                   
+0

對不起,你能解釋更多嗎?我應該在哪裏添加?在活動或片段?謝謝 – Hoo

+0

您應該將此添加到活動中,以便與它關聯的所有片段都可以直接從活動參考中獲取它。請參閱更新後的答案,告訴我您是否有任何問題。 – Arslan

+0

'YourActivity'是指'WorkDetails'或'Claims'? – Hoo

0

當你實例化你的索賠片段,實例化一個bundle對象並分配需要在bundle中傳遞的任何數據並將其設置爲片段的參數。

Bundle bundle = new Bundle(); 
bundle.putLong("ab",10L); 
new Claims().setargument(bundle); 

然後在你要求片段的onCreateView()你可以訪問此捆數據作爲

Bundle bundle = getArguments(); 
long ab = bundle.getLong("ab"); 
+0

我使用Toast來顯示值fk,但是我得到了0,儘管ab不是0 ...看到我編輯的文章 – Hoo

+0

你正在傳遞來自主活動的字符串並從你的片段中長訪問。尊重數據類型。如果你打算持續很長時間,嘗試從雙方發送和接收很長時間。上面的代碼是將數據傳遞到片段的基本方式,驗證您傳遞正確的數據和數據類型。 – NIPHIN

+0

但是我不能使用'bundle.putLong(「ab」,「ab」);'..compiler表示錯誤的第二個參數類型 – Hoo