Reputation: 111
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
Reputation: 634
Use
EditText editText = getActivity().findViewById(R.id.EditText);
Upvotes: 6
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
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
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.
public void onAttach (Activity activity) {
super.onAttach(activity);
if(activity.getClass()== YourActivity.class){
mActivity = (YourActivity) activity;
}
}
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
Reputation: 832
You can declare edittext object as static then in fragment you can use like
Mainactivity.edittextobj.setText("Test");
Upvotes: 0
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