2014-03-31 20 views
0

我想设置一些EditTexts文本点击列表中的项目后。Android - 尝试从SQLite打开一行成多个片段

活动:
- CadPersonActivity

而且三个片段,每一个有字段:
- FragmentPersonId
- FragmentPersonAddress
- FragmentPersonPhones

但是那些EditTexts坚持不显示什么我预计。 没有错误,但空白字段。

我希望有人能帮助我。

在此先感谢。

酶活性的影响

CadPersonActivity恢复标识捆绑演员:被点击的记录,它的编号传递到CadPersonActivity时

public class CadPersonActivity extends FragmentActivity implements TabListener { 
private ActionBar actionBar; 
private ViewPager viewPager; 
private PersonPageAdapter pageAdapter; 
private Person person; 
private PersonDAO bd; 
private Bundle extras; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_cad_person); 
     extras = getIntent().getExtras(); 

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

     pageAdapter = new PersonPageAdapter(getSupportFragmentManager()); 

     viewPager = (ViewPager) findViewById(R.id.pager); 
     viewPager.setAdapter(pageAdapter); 
     viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); 

     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       actionBar.setSelectedNavigationItem(position); 
      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
      } 
     }); 

     actionBar.addTab(actionBar.newTab().setText(getString(R.string.tab_id)).setTabListener(this)); 
     actionBar.addTab(actionBar.newTab().setText(getString(R.string.tab_address)).setTabListener(this)); 
     actionBar.addTab(actionBar.newTab().setText(getString(R.string.tab_phones)).setTabListener(this)); 

     if (extras.getInt("id") > 0) { 
      bd = new PersonDAO(getApplicationContext()); 
      person = bd.getPerson(extras.getInt("id")); 
      callSetFields(); 
     } 

    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if (bd != null) 
      bd.close(); 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    } 

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

    private void callSetFields() { 
     try { 
      FragmentPersonId fragId = (FragmentPersonId) getSupportFragmentManager().findFragmentById(R.id.fragment_id); 
      fragId.setFields(person); 

      FragmentPersonAddress fragEndereco = (FragmentPersonAddress) getSupportFragmentManager().findFragmentById(R.id.fragment_endereco); 
      fragEndereco.setFields(person); 

      FragmentPersonPhones fragPhones = (FragmentPersonPhones) getSupportFragmentManager().findFragmentById(R.id.fragment_phones); 
      fragPhones.setFields(person); 
     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "An error occurred while trying to open the record.", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

CallSetFields被调用。

的activity_cad_person.xml:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment 
     android:id="@+id/fragment_id" 
     android:name="com.fragment.FragmentPersonId" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     tools:layout="@layout/fragment_id" /> 

    <fragment 
     android:id="@+id/fragment_address" 
     android:name="com.fragment.FragmentPersonAddress" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     tools:layout="@layout/fragment_address" /> 

    <fragment 
     android:id="@+id/fragment_phones" 
     android:name="com.fragment.FragmentPersonPhones" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     tools:layout="@layout/fragment_phones" /> 

</android.support.v4.view.ViewPager> 



片段:

而且每个片段有一个这样的代码:

public class FragmentPersonId extends Fragment { 

    private EditText edtName; 

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

     return view; 
    } 

    public void setFields(Pessoa pessoa) { 
     try { 
      edtName = (EditText) getView().findViewById(R.id.edtName); 
      edtName.setText(person.getName()); 
     } catch (Exception e) { 
      Toast.makeText(getActivity().getApplicationContext(), "Error while setting fields.", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

回答

0

好了,经过几天的搜索和尝试,我有这个

  • 声明类Person在CadPersonActivity公共静态的; public static Person person;

  • 现在,实例化这些EditText并直接在onCreateView中调用person.getName; edtName =(EditText)view.findViewById(R.id.edtName); edtName.setText(CadPersonActivity.person.getName());

我看不出这是一个很好的解决方案,但它是我能找到的最好的解决方案。