2013-01-24 25 views
7

Tôi đang có tính năng mainActivity bao gồm 3 hoạt động phân mảnh trong một máy nhắn tin dạng xem. Phần phân đoạn bao gồm các văn bản chỉnh sửa. Làm thế nào để lấy giá trị của văn bản chỉnh sửa vuốt phân đoạn theo chiều ngang? Tôi cố gắng để làm như this.below đangcách truy cập giá trị của tập tin edittext bên trong phân đoạn trong một viewpager

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


} 

khi tôi cố gắng để truy cập eddittext bên trong lớp pageZero như dưới đây

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

tôi đang nhận được vô value.help tôi out..Thanks trước .

+0

@chnmaya bạn có thể nhận được bất kỳ giải pháp? – PankajAndroid

Trả lời

1

Để tạo 3 mảnh khác nhau với quan điểm pager bạn nên:

1) Tạo FragmentActivity với quan điểm pager và bộ chuyển đổi xem máy nhắn tin.

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) Tạo 3 Những mảnh vỡ với trường hợp tĩnh

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) Điền xem bộ chuyển đổi máy nhắn tin với nó;

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

nơi tôi có thể truy cập vào văn bản nằm bên trong đoạn? – chinmaya

5

Thay đổi lớp pagezero đang oncreateview như thế này .....

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

Return người bạn xem và sau đó sử dụng bố trí inflater mặc định ...

+0

Hoàn hảo, tôi nhìn hầu như khắp mọi nơi để có được giải pháp này. Cảm ơn bạn đã lưu ngày của tôi, Cảm ơn #Android Developer –

+0

Nếu tôi có thể hỏi, làm thế nào sẽ thay đổi 'inflater' thành' getActivity(). GetLayoutInflater() 'help trong trường hợp này? Theo như tôi biết, điều này là chính xác như nhau. Ngoài ra, nó không làm việc cho tôi. – Timmiej93

3

Vào thời điểm đó bạn nhấp vào trường edittext, có nội dung nào không? Có lẽ bạn sẽ nhận được văn bản trong sự kiện tiêu điểm bị mất của trường edittext. Vì vậy bạn có thể nhập một số văn bản đầu tiên ...

Ví dụ:

name.setOnFocusChangeListener(new OnFocusChangeListener() { 

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

     } 
    }); 

Cách bạn cố gắng để có được những văn bản có vẻ đúng với tôi. Ít nhất tôi cũng làm như vậy.

Trong 'GetItem' Phương pháp của PagerAdapter bạn nên nhanh chóng mảnh vỡ của bạn trực tiếp:

@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; 
} 

Các ViewPager chỉ gọi GetItem nếu nó muốn tạo một mục mới. Thật không may, họ gọi phương thức getItem và không phải là createItem, điều này sẽ rõ ràng hơn.

+0

trình gỡ lỗi không tham gia vào sự kiện onclick .. – chinmaya

+0

bạn có thể cho biết tôi nên truy cập vào edittext để lấy giá trị được nhập vào không? – chinmaya

+1

bạn có thể sử dụng 'OnFocusChangeListener' 'code' name.setOnFocusChangeListener (OnFocusChangeListener mới() { \t \t \t \t \t \t @ Override \t \t \t public void onFocusChange (Xem v, boolean hasFocus) { \t \t \t \t nếu (hasFocus == false) { \t \t \t \t \t // có được văn bản ... \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; 
} 
} 

Sau đó, bạn có thể truy cập tên EditText tĩnh công cộng (sau khi chế độ xem cho nó đã được tạo ra) từ một đoạn khác như thế này.

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

Chúc mừng. Vui lòng đánh dấu câu trả lời này là câu trả lời đúng nếu nó giúp bạn. Bạn có khá nhiều câu trả lời ở đây

0

Tôi đã thử mã bên dưới. Làm việc đối với tôi

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

Nhận của bạn EditText bên onClick khối ...

này có nghĩa là thay đổi mã từ:

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; 
} 
Các vấn đề liên quan