BujjiDeepu
BujjiDeepu

Reputation: 111

How to access activity View components inside fragment in android

I had an edit text in my activity and i want to check that edit text whether it was empty or not from a fragment. Can any one tell me how to access edit text view component present in activity from a fragment in android . I had done this but it is not working . This is my activity:

   package com.developer.mainandroid;


import android.widget.EditText;
import com.milan.tabs.pagerslidingstrip.PagerSlidingTabStrip;
import com.milan.validation.lib.RegExpressionValueValidator;
import com.milan.validation.lib.ValidationManager;

import android.app.ActionBar;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.widget.SearchView;
import android.text.InputType;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.TextView;



public class Manual extends FragmentActivity  {
    private final Handler handler = new Handler();
    private PagerSlidingTabStrip tabs_sliding_strip;
    private ViewPager pager;
    private Tests adapter_tests;
    TextView welcome_headder;
    String welcome_headder_string;
    public EditText search_edit_text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.manual);

        ActionBar actionbar;
        actionbar = getActionBar();
        ColorDrawable color_action_bar = new ColorDrawable();
        color_action_bar.setColor(Color.parseColor("#673AB7"));
        actionbar.setBackgroundDrawable(color_action_bar);  
        search_edit_text = (EditText)findViewById(R.id.edt_number);
        search_edit_text.setInputType(InputType.TYPE_CLASS_NUMBER);
        search_edit_text.setGravity(Gravity.CENTER);
        search_edit_text.setCursorVisible(false);
        search_edit_text.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                search_edit_text.setCursorVisible(true);

            }
        });

        tabs_sliding_strip = (PagerSlidingTabStrip)findViewById(R.id.pager_sliding_tab_strip);
        pager = (ViewPager)findViewById(R.id.pager);
        adapter_tests = new Tests(getSupportFragmentManager());
        pager.setAdapter(adapter_tests);
        final int page_margin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources().getDisplayMetrics());
        pager.setPageMargin(page_margin);
        tabs_sliding_strip.setTextColor(Color.parseColor("#FFFFFF"));
        tabs_sliding_strip.setTabActiveTextColor(Color.parseColor("#673AB7"), Color.parseColor("#FFFFFF"));
        tabs_sliding_strip.setViewPager(pager);
       // tabs_sliding_strip.setTextColor(Color.parseColor("#FF00FF"));


    }



    public class Tests extends FragmentPagerAdapter{

        private final String[] tests_types = {"BEFORE CONNECTING FUSE","AFTER CONNECTING FUSE","PISTON","FINAL AMMUNITATION"};

        public Tests(FragmentManager fm) {
            super(fm);
            // TODO Auto-generated constructor stub
        }
        @Override
        public CharSequence getPageTitle(int position) {
            return tests_types[position];
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return tests_types.length;
        }
        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return new ManualMode_BC_Fuse_ckt();
            case 1:
                return new Manual_AC_Fuse_ckt();
            case 2:
                return new piston();
            case 3:
                return new Manualmode_final();
            }
            return new ManualMode_BC_Fuse_ckt();
        }

    }

}

This is my fragment activity:

package com.developer.mainandroid;

import com.milan.material.widget.FloatingEditText;
import com.milan.validation.lib.RegExpressionValueValidator;
import com.milan.validation.lib.ValidationManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.graphics.Color;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;
public class Manual_AC_Fuse_ckt extends Fragment {

    Manual manual_child;
    static FloatingEditText number_edit_text;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        Root_view = inflater.inflate(R.layout.manualmode_ac_fuse_ckt, null);
         manual_child = new Manual();
        number_edit_text = (FloatingEditText)getActivity().findViewById(R.id.edt_number);

        registerForContextMenu(table_fuse_afer_cnc);
        return Root_view;
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("MANUAL MODE : AFTER FUSE CONNECTION");
        menu.add(1, v.getId(), 0, "TEST  ");
        menu.add(1, v.getId(), 0, "SELECT ALL  ");
        menu.add(1, v.getId(), 0, "DESELECT ALL  ");
        super.onCreateContextMenu(menu, v, menuInfo);
    }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        if(item.getTitle()=="TEST  ")
        {
            if(manual_child.search_edit_text.equals(""))
            {
                Toast.makeText(getActivity(), "Please enter number", Toast.LENGTH_LONG).show();

            }
            else{

            //Do some operations

            }
        else if(item.getTitle()=="SELECT ALL  ")
        {

        }
        else if(item.getTitle()=="DESELECT ALL  ")
        {

        }

        return super.onContextItemSelected(item);
    }
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if(activity.getClass()==Manual.class){
            manual_child = (Manual)activity;
        }
    }
    }

This is my Logcat:

01-02 03:07:43.170: E/AndroidRuntime(13424): FATAL EXCEPTION: main
01-02 03:07:43.170: E/AndroidRuntime(13424): java.lang.NullPointerException
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.app.Activity.findViewById(Activity.java:1853)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at com.developer.mainandroid.Manual_AC_Fuse_ckt.onCreateView(Manual_AC_Fuse_ckt.java:74)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:488)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.View.measure(View.java:15848)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:477)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.View.measure(View.java:15848)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.View.measure(View.java:15848)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:302)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.View.measure(View.java:15848)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.View.measure(View.java:15848)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.Choreographer.doFrame(Choreographer.java:532)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.os.Handler.handleCallback(Handler.java:730)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.os.Handler.dispatchMessage(Handler.java:92)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.os.Looper.loop(Looper.java:137)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at android.app.ActivityThread.main(ActivityThread.java:5103)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at java.lang.reflect.Method.invokeNative(Native Method)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at java.lang.reflect.Method.invoke(Method.java:525)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-02 03:07:43.170: E/AndroidRuntime(13424):    at dalvik.system.NativeStart.main(Native Method)

Upvotes: 3

Views: 9322

Answers (6)

KISHORE K J
KISHORE K J

Reputation: 634

Use

EditText  editText =  getActivity().findViewById(R.id.EditText);

Upvotes: 6

BujjiDeepu
BujjiDeepu

Reputation: 111

After a Long discussion with my friend in stack over flow I had found the solution to access view components present inside parent activity from Fragment

Make the view component as public static in your parent activity and make sure that fragment activity of same package

This is the my code: Parent Activity:

public class Sample extends FragmentActivity  {
 public static EditText meditText;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout....);
{
meditText = (EditText)findViewById(R.id.ed_1);

}
}

In Fragment Activity:

public class Example extends Fragment {

Sample sample_child;
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
Root_view = inflater.inflate(R.layout.....);
sample_child = new Sample();
if(sample_child.meditText.getText().toString().equals(""))
                {
                    Toast.makeText(getActivity(), "Please Enter text or number", Toast.LENGTH_LONG).show();

                }
return Root_view;
}
}

Upvotes: 2

Eric
Eric

Reputation: 86

you could override method in class Manual:

@Override
public boolean onContextItemSelected(MenuItem item) {
    return super.onContextItemSelected(item);
}

and invoke if sentence in it

update---> write this method in Activity class Manual:

@Override
public boolean onContextItemSelected(MenuItem item) {
    if(item.getTitle()=="TEST  ")
    {
        if(manual_child.search_edit_text.equals(""))
        {
            Toast.makeText(getActivity(), "Please enter number", Toast.LENGTH_LONG).show();

        }
        else{

        //Do some operations

        }
    else if(item.getTitle()=="SELECT ALL  ")
    {

    }
    else if(item.getTitle()=="DESELECT ALL  ")
    {

    }

    return super.onContextItemSelected(item);
}

Upvotes: 0

Nam
Nam

Reputation: 56

For short you can do this. In your framgment, in onResume(). Call ((YourActivityClass)getActivity()).edit_text.

For long, you must know that getActivity() is not always return your activity, some time it will return null. So you must do 2 step.

  1. Get the activity in onAttach() then cast it to your activity and save it in your fragment

public void onAttach (Activity activity) { super.onAttach(activity); if(activity.getClass()== YourActivity.class){ mActivity = (YourActivity) activity; } }

  1. Access your edit_text through your activity variable like this

mActivity.edit_text

UPDATE #1: I will change your oncreateview of your fragment

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    Root_view = inflater.inflate(R.layout.manualmode_ac_fuse_ckt, null);




    manual_child = new Manual();
    number_edit_text = (FloatingEditText)getActivity().findViewById(R.id.edt_number);

    registerForContextMenu(table_fuse_afer_cnc);
    return Root_view;


}

into this

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    Root_view = inflater.inflate(R.layout.manualmode_ac_fuse_ckt, null);

    number_edit_text = (FloatingEditText)manual_child.findViewById(R.id.edt_number);

    registerForContextMenu(table_fuse_afer_cnc);
    return Root_view;

}

UPDATE #2: change

if(manual_child.search_edit_text.equals(""))
        {
            Toast.makeText(getActivity(), "Please enter number", Toast.LENGTH_LONG).show();

        }

into this

if(manual_child.search_edit_text.getText().toString().equals(""))
        {
            Toast.makeText(manual_child, "Please enter number", Toast.LENGTH_LONG).show();

        }

Upvotes: 1

koutuk
koutuk

Reputation: 832

You can declare edittext object as static then in fragment you can use like

Mainactivity.edittextobj.setText("Test");

Upvotes: 0

Chaudhary Amar
Chaudhary Amar

Reputation: 856

Use Validation For That Like This:- In Main Class:-

  if (!(Validation.validateUsername(nameString))) {
                    editxt_name.setError(Html
                            .fromHtml("<font color='red'>Please enter username</font>"));
                    return;

And in Validation Class:

public static boolean validateUsername(String username) {
    if (username.length() > 0) {
        return true;
    } else {
        return false;
    }

Upvotes: 0

Related Questions