3

I am using a nav drawer with three items(Time sheet, claims, project) and I would like to pass ab to claims. In time sheet I have 3 activities, the ab is in the work_details activity.How can I do to achieve this?

TimeSheet has 3 activities (Information(extend to fragment),work force,work details)

Claims has 2 activities(claims(extend to fragment), 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;
    }

I refer from Send data from activity to fragment in android but the app crashed when I select claims item.

11-02 09:25:55.910 6116-6116/com.example.project.project E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: 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) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1453)

I think the NullPointException is came from here

fk=data.getLong("ab");

Do I need to add the parameter in MainActivity?

MainActivity.java

Some part of code snippet in 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);
                }

Claims.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");
            }
        }
    }
Community
  • 1
  • 1
Hoo
  • 1,806
  • 7
  • 33
  • 66
  • In WorkDetails `Claims fragobj=new Claims();` what happens to this? You seem to set the arguments on an object that you don't use. Try setting arguments from the Activity as that seems to be where you are adding the fragment. – Markus Maga Nov 02 '15 at 01:43
  • `Do I need to add the parameter in MainActivity?` yes, if thats where you create and add the fragment to the fragment manager. – Markus Maga Nov 02 '15 at 01:47
  • @MarkusMaga hi..sorry, I don't get it.What should I write in `MainActivity` so that the `ab` can pass to `Claims.java `? – Hoo Nov 02 '15 at 01:49
  • after `fragment=new Claims();` you can create bundle add ab and set arguments on `fragment`. If you don't have the ab value in main activity you have to send it there first. Is WorkDetails an activity or fragment? How is the flow? Can you add an explaining picture? :) Do you get to claims from WorkDetails through main activity? – Markus Maga Nov 02 '15 at 01:58
  • `WorkDetails` is activity, but `Claims` is fragment – Hoo Nov 02 '15 at 02:04
  • 1
    You should add a break in case 2,3, and 4 in MainActivity – OneCricketeer Nov 02 '15 at 02:11
  • Is MainActivity a base class which your other activities extend from? – Markus Maga Nov 02 '15 at 02:12
  • @MarkusMaga Nope..`public class WorkDetailsTable extends AppCompatActivity` – Hoo Nov 02 '15 at 02:13
  • @cricket_007 added..still getting the same result – Hoo Nov 02 '15 at 02:16
  • @Hoo - I know, just saving you from issues later on once you fix this one :) – OneCricketeer Nov 02 '15 at 02:19
  • @cricket_007 ok :)..thanks – Hoo Nov 02 '15 at 02:21
  • use `bundle.putLong("ab",ab)` instead of `bundle.putString("ab","ab")` – gilchris Nov 02 '15 at 04:24
  • `java.lang.NullPointerException`!!! – Hoo Nov 02 '15 at 04:33
  • I using Toast to display the value fk, but I get 0 although ab not 0...see my edited post – Hoo Nov 02 '15 at 05:24

3 Answers3

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

}
S-MILE-S
  • 114
  • 6
1

What you can just do is to place this data in your activity where fragment is placed. example is.

in your activity long ab = 12.4;

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

     "OR"

make ab like

static long ab = value; // your Details activity

in your details activity and get the value of this

with details activity name like

long data = Details.ab //in your claims activity.                                                                        
Arslan Ashraf
  • 867
  • 7
  • 12
0

When you are instantiating your Claim Fragment , instantiate a bundle object and assign whatever data that you need to be passed in bundle and set it as argument to the fragment.

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

Then in your Claim fragment's onCreateView() you can access this bundle data as

 Bundle bundle = getArguments();
 long ab = bundle.getLong("ab");
NIPHIN
  • 1,071
  • 1
  • 8
  • 16
  • I using Toast to display the value fk, but I get 0 although ab not 0...see my edited post – Hoo Nov 02 '15 at 05:27
  • you are passing string from main activity and accessing long from your fragment. respect the datatype. Try to send and receive long from both side if you intent to pass long. The above code is a basic way of passing data to fragments, verify you are passing right data and datatype. – NIPHIN Nov 02 '15 at 05:33
  • But I cannot use `bundle.putLong("ab","ab");`..compiler said wrong 2nd argument type – Hoo Nov 02 '15 at 06:18
  • the second argument is String, so the error pops up. set us long ab = 10L; bundle.putLong("ab",ab); – NIPHIN Nov 02 '15 at 06:21
  • But if you refer to my latest edited, I have used long in Claims and WorkDetails, but still cannot use bundle.putLong("ab","ab") in MainActivity – Hoo Nov 02 '15 at 06:28
  • "ab" is string, ab is object, try learning basics before codding. Happy Coding :) – NIPHIN Nov 02 '15 at 06:31