2013-01-24 66 views
7

我有一個mainActivity,它由視圖pager中的3個片段活動組成。每個片段由編輯文本組成。如何獲取編輯文本的值水平滑動片段?我試圖做這樣this.below代碼如何訪問viewpager中的edittext內部片段的值

public class MainActivity extends FragmentActivity { 

int value = 0; 
Context context; 
String a = ""; 

SectionsPagerAdapter mSectionsPagerAdapter; 


ViewPager mViewPager; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    // getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    setContentView(R.layout.activity_main); 

    // Set up the action bar. 
    //final ActionBar actionBar = getActionBar(); 
// actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    mAddButtonB = (Button) findViewById(R.id.addnewB); 

    mAddSearchV = findViewById(R.id.addnewSearch); 
    mAddButtonB.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      mAddSearchV.setVisibility(View.GONE); 
      mSectionsPagerAdapter = new SectionsPagerAdapter(
        getSupportFragmentManager()); 
      mViewPager = (ViewPager) findViewById(R.id.customviewpager); 
      mViewPager.setAdapter(mSectionsPagerAdapter); 


     } 
    }); 
     } 



public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    PageZero p0; 
    PageOne p1; 
    PageTwo p2; 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
     p0 = new PageZero(); 
     p1 = new PageOne(); 
     p2 = new PageTwo(); 
    } 

    @Override 
    public Fragment getItem(int position) { 


     switch (position) { 
     case 0: 
      return p0; 
     case 1: 
      return p1; 
     case 2: 
      return p2; 
     } 
     return null; 
    } 


    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 3; 
    } 


} 
// PageZero = (Fragment1)getFragmentManager().findFragmentByTag("frag1"); 
public class PageZero extends Fragment { 
private EditText name; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.componentname, container, 
       false); 
     name=(EditText)view.findViewById(R.id.nameTV); 

     name.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       a=name.getText().toString().trim(); 
       Toast.makeText(getApplicationContext(),a,Toast.LENGTH_SHORT).show(); 


      } 
     });/*(new OnKeyListener() { 

      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       // TODO Auto-generated method stub 
       a=name.getText().toString().trim(); 
       Toast.makeText(getApplicationContext(), a,Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     });*/ 
     return view; 
    } 
} 

public class PageOne extends Fragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.componentaddress, container, 
       false); 


     return view; 
    } 
} 

public class PageTwo extends Fragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.componentmobno, container, 
       false); 
     return view; 
    } 
} 


} 

當我嘗試訪問pageZero類中的eddittext像下面

name=(EditText)view.findViewById(R.id.nameTV); 
a=name.getText().toString().trim(); 

我得到空value.help我out..Thanks提前。

+0

@chnmaya您可以得到任何解決辦法嗎? – PankajAndroid

回答

1

要創建應查看呼機3個不同的片段:

1)創建視圖尋呼機和查看傳呼機適配器FragmentActivity。

public class FragmentActivity extends FragmentActivity 
{ 
    private FragmentAdapter adapter; 
    private ViewPager pager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_fragment);  
     adapter = new FragmentAdapter(getSupportFragmentManager()); 
     pager = (ViewPager) findViewById(R.id.pager); 
     pager.setAdapter(adapter); 
    } 

2)創建3個片段與靜態實例

public final class Fragment1 extends Fragment 
{ 
    public static Fragment1 newInstance() { 
     return new Fragment1(); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     LinearLayout layout = new LinearLayout(getActivity()); 
// your fragment xml view 
     return view; 
    } 
} 

3)裝滿它視圖尋呼機適配器;

public class FragmentAdapter extends FragmentPagerAdapter 

{  
    public InstallFragmentAdapter(FragmentManager fm) { 
     super(fm); 
    } 
    @Override 
    public Fragment getItem(int position) {  
     switch (position) { 
      case 0: 
       return Fragment1.newInstance(); 
      case 1: 
       return Fragment2.newInstance(); 
      case 2: 
       return Fragment3.newInstance(); 
     } 
     return null; 
    } 
} 
+4

在哪裏我可以訪問該片段內的edittext? – chinmaya

5

更改pagezero類oncreateview這樣的代碼.....

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view =getActivity().getLayoutInflater().inflate(R.layout.componentname,null); 
     name=(EditText)view.findViewById(R.id.nameTV); 

     name.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       a=name.getText().toString().trim(); 
       Toast.makeText(getApplicationContext(),a,Toast.LENGTH_SHORT).show(); 


      } 

return view; 
     }); 

返回的觀點的朋友,然後使用默認佈局吹氣......

+0

完美無缺,我幾乎到處尋找這個解決方案。謝謝你保存了我的一天,謝謝#安卓開發者 –

+0

如果我可能會問,在這種情況下如何將'inflater'改成'getActivity()。getLayoutInflater()'幫助?據我所知,這是完全一樣的。另外,它不適合我。 – Timmiej93

3

那時的你點擊edittext字段,有沒有什麼內容?也許你應該在edittext字段的丟失焦點事件中獲取文本。因此,你可以輸入一些文字第一...

例子:

name.setOnFocusChangeListener(new OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if(hasFocus == false){ 
       //get text from edittext field... 
      } 

     } 
    }); 

您嘗試獲取文字的方式看起來我的權利。至少我是這樣做的。

在PagerAdapter的「的getItem」方法,你應該直接實例您的片段:

@Override 
public Fragment getItem(int position) {  
    switch (position) { 
     case 0: 
      return new PageZero(); 
     case 1: 
      return new PageOne(); 
     case 2: 
      return new PageTwo(); 
    } 
    return null; 
} 

的Viewpager只有當它想要創建一個新的項目要求的getItem。不幸的是,他們調用getItem方法,而不是createItem,這會更明顯。

+0

調試器不在onclick事件中。 – chinmaya

+0

可以告訴我應該在哪裏訪問edittext以獲取輸入的值。 – chinmaya

+1

你可以使用 'OnFocusChangeListener''code' name.setOnFocusChangeListener(新OnFocusChangeListener(){ \t \t \t \t \t \t @覆蓋 \t \t \t公共無效onFocusChange(查看V,布爾hasFocus){ \t \t \t \t如果(hasFocus == FALSE){ \t \t \t \t \t //獲取文本... \t \t \t \t} \t \t \t \t \t \t \t} \t \t}); – faceman

0
public class PageZero extends Fragment { 
    public static EditText name; //change this to public static 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.componentname, container, 
      false); 
    name = (EditText)view.findViewById(R.id.nameTV); 

    name.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
     } 
    }); 

    return view; 
} 
} 

然後,您可以從另一個片段中像這樣訪問公共靜態EditText名稱(當然已生成視圖後)。

public class PageOne extends Fragment { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.componentaddress, container, 
      false); 

    EditText page_one_text = PageZero.name; //you can get that variable in any fragment now, but using the class name of that fragment to access it 

    return view; 
} 
} 

乾杯。如果它可以幫助你,請將其標記爲正確的答案。你在這裏有相當多的答案

0

我試過下面的代碼。爲我工作

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 


    View v = inflater.inflate(R.layout.fragment_main_explore, container, false); 
    ed1 = (EditText)v.findViewById(R.id.editTextTemp); 
    if(ed1 == null) 
    { 
     Toast.makeText(getActivity(), "ERROR UNABLE TO GET EDIT", Toast.LENGTH_LONG).show(); 
    } 


    // Inflate the layout for this fragment 
    //return inflater.inflate(R.layout.fragment_main_explore, container, false); 
    return v; 
} 
3

讓您EditTextonClick塊...

這意味着代碼更改:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.componentname, container, false); 

     name=(EditText)view.findViewById(R.id.nameTV); 

     name.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
        a=name.getText().toString().trim(); 
        Toast.makeText(getApplicationContext(),a,Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    return view; 
} 

要:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.componentname, container, false); 

     name.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

        // GET EDIT TEXT HEAR: 
        EditText name=(EditText)view.findViewById(R.id.nameTV); 

        a=name.getText().toString().trim(); 
        Toast.makeText(getApplicationContext(),a,Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    return view; 
} 
相關問題