2012-11-29 88 views
4

我正在嘗試創建一個使用選項卡作爲輸入表單的android應用程序。基本上我希望設置它,以便用戶可以在一個選項卡上輸入一些信息,然後提交該信息,或轉到另一個選項卡並輸入更多信息,然後從兩個選項卡提交信息。從多個選項卡中的編輯文本字段中獲取文本

我正在使用操作欄和片段來顯示我的選項卡從一個活動。

如果我在一個選項卡中輸入文本,然後切換到另一個選項卡,然後切換回來,文本仍然存在,但我似乎想出瞭如何從選項卡中獲取當前未顯示的文本按鈕被點擊。

有沒有辦法做到這一點?

好吧,繼承我的代碼到目前爲止。我很抱歉在這裏發帖。

我的選項卡設置使用此:

ActionBar bar = getActionBar(); 
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

//initiate tabs, set text and set listeners 
Tab tab = bar.newTab(); 
tab.setText("Details"); 
tab.setTabListener(new TabListener<DetailsFragment>(this, "Details", DetailsFragment.class)); 
bar.addTab(tab); 

tab = bar.newTab(); 
tab.setText("Comments"); 
tab.setTabListener(new TabListener<CommentsFragment>(this, "Details", CommentsFragment.class)); 
bar.addTab(tab); 

我TabListener:

private class TabListener<T extends Fragment> implements ActionBar.TabListener{ 
private Fragment mFragment; 
private final Activity mActivity; 
private final String mTag; 
private final Class<T> mClass; 

public TabListener(Activity activity, String tag, Class<T> clz){ 
    mActivity = activity; 
    mTag = tag; 
    mClass = clz; 
} 

public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    //check if the fragment is already initialized 
if(mFragment == null){ 
//if not, instantiate and add it to the activity 
mFragment = Fragment.instantiate(mActivity, mClass.getName()); 
ft.add(android.R.id.content, mFragment, mTag); 
    } 
else{ 
//if it exists, attach it in order to show it 
ft.attach(mFragment); 
} 
} 

我就點擊收聽:

  public void onClick(View v) { 

      titleText = (EditText)findViewById(R.id.textTitle); 
      authorText = (EditText)findViewById(R.id.textAuthor); 
      seriesText = (EditText)findViewById(R.id.textSeries); 
      pubText = (EditText)findViewById(R.id.textPublisher); 
      isbnText = (EditText)findViewById(R.id.textISBN); 
      commentsText = (EditText)findViewById(R.id.textComments); 

      String title = titleText.getText().toString(); 
      String author = authorText.getText().toString(); 
      String series = seriesText.getText().toString(); 
      String pub = pubText.getText().toString(); 
      String isbn = isbnText.getText().toString(); 
      String comments = commentsText.getText().toString(); 

我的片段類看起來是這樣的:

public class DetailsFragment extends Fragment{ 

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

}

及其佈局的例子:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/detailsTab" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:gravity="center_horizontal"> 

<EditText android:id="@+id/textTitle" 
    android:hint="@string/textTitle" 
    android:inputType="textCapWords" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:layout_marginBottom="15dp" 
    android:layout_marginTop="25dp"> 
    <requestFocus /> 
</EditText> 

<EditText android:id="@+id/textAuthor" 
    android:hint="@string/textAuthor" 
    android:inputType="textCapWords" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:layout_margin="15dp"/> 

如果你想看到我可以張貼以及任何其他代碼。

+1

你試過了什麼? –

+0

我試圖使用(EditText)findViewById(R.id.myEditTextField);按鈕的onClick偵聽器中的主活動中的編輯文本字段;但對於當前未顯示的選項卡,它只返回null。 – user1862275

+0

請發佈您的代碼... –

回答

0

好吧,所以我想出了一種方法讓它工作,我希望如何。我懷疑它是做這件事的最好方式,但是我做了什麼。

在tabListener中的onTabUnselected中,我在分離片段之前添加了一個函數,以檢查將要分離哪個片段,然後將數據保存到存儲在活動中的變量。

public void onTabUnselected(Tab tab, FragmentTransaction ft) 
    { 
    if(mFragment != null) 
    { 
      saveData(mFragment); 

      //Detach the fragment 
      ft.detach(mFragment); 
     } 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     //do nothing 
    } 
} 

private void saveData(Fragment frag){ 
    if(frag.getTag() == "Details") 
    { 
     titleText = (EditText)findViewById(R.id.textTitle); 
     title = titleText.getText().toString(); 
     authorText = (EditText)findViewById(R.id.textAuthor); 
     author = authorText.getText().toString(); 
    } 
    else if(frag.getTag() == "Comments") 
    { 
     commentsText = (EditText)findViewById(R.id.textComments); 
     comments = commentsText.getText().toString(); 
    } 
} 

我仍然覺得自己必須有,因爲當我在文本框選項卡之間切換的數據將被保留這樣做的更好的方法。

相關問題