2015-11-02 33 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