android ViewPager改变 Fragment 中的TextView的值

2015-1-20 9:13:48     人阅读    

我现在有一个ViewPager 包含了3个 Fragments,我现在想改变第三个  Fragments  页面的一个TextView的文本


在那个页面,有一个按钮,点击的时候去SD卡中选择一个图片选择后更新图片的路径到TextView中,现在的问题时 当我获得 TextView的时候返回null

下面是我的代码
SherlockFragmentActivity:

public class TabsFacturasActivity extends SherlockFragmentActivity {



    protected MyApplication myApplication;
 
    private static final int FILE_SELECT_CODE = 0;



    private MyAdapter mAdapter;
 
    private ViewPager mPager;
 
    private PageIndicator mIndicator;
 
    private TextView textViewImg;



    private int lecturas = 0;
 
    private SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
 
    private boolean adjunto = false;
 
    private String filePath;
 
    private boolean esLecturaAT = false;



    @Override
 
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.fragment_pager);



        // Get the application instance
 
        myApplication = (MyApplication)getApplication();



        //Need to get that view
 
        textViewImg = (TextView) findViewById(R.id.textViewUrlImgLectura);



        //Creamos la lista
 
        LinkedList<String> direcciones = new LinkedList<String>();
 
        ArrayList<TuplaCupsWS> dirs = myApplication.getUsuarioActual().getCups();
 
        for(int dir = 0; dir < myApplication.getUsuarioActual().getCups().size(); dir++) {
 
            direcciones.add(new String(dirs.get(dir).getDireccion()));
 
        }



        int tab = getIntent().getIntExtra("tab", 0);



        mAdapter = new MyAdapter(getSupportFragmentManager());



        mPager = (ViewPager)findViewById(R.id.pager);
 
        mPager.setAdapter(mAdapter);
 
        mPager.setCurrentItem(tab);



        mIndicator = (TitlePageIndicator)findViewById(R.id.indicator);
 
        mIndicator.setViewPager(mPager);



        getSupportActionBar().setDisplayShowTitleEnabled(false);
 
        getSupportActionBar().setIcon(R.drawable.logo_factorenergia_peque);



        /** 创建adapter  for populate dropdownlist   */
 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
 
                getBaseContext(), android.R.layout.simple_spinner_dropdown_item, direcciones);



        /**   配置 action bar */
 
        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);



        /** 定义监听器 */
 
        OnNavigationListener navigationListener = new OnNavigationListener() {



            @Override
 
            public boolean onNavigationItemSelected(int itemPosition, long itemId) {
 
                return false;
 
            }
 
        };



        /** Setting dropdown items and item navigation listener for the actionbar */
 
        getSupportActionBar().setListNavigationCallbacks(adapter, 
 
                (com.actionbarsherlock.app.ActionBar.OnNavigationListener) 
 
                navigationListener);
 
    }



    @Override
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 
        switch (requestCode) {
 
            case FILE_SELECT_CODE:
 
            if (resultCode == RESULT_OK) {
 
                adjunto = true;
 
                // Get the Uri of the selected file 
 
                Uri uri = data.getData();
 
                // Get the path
 
                String path = "";
 
                try {
 
                    path = MyUtility.getPath(this, uri);
 
                } catch (URISyntaxException e) {
 
                    myApplication.throwException(this);
 
                    e.printStackTrace();
 
                }
 
                String imgName = path.split("/")[path.split("/").length-1];
 
                textViewImg.setText(imgName); //Here textViewImg is null
 
                filePath = path;
 
            }
 
            break;
 
        }
 
        super.onActivityResult(requestCode, resultCode, data);
 
    }



    //Method executed when Button is pressed
 
    public void examinar(View view) {
 
        mostrarFileChooser();       
 
    }



    private void mostrarFileChooser() {     
 
        Intent intent = new Intent(Intent.ACTION_PICK);
 
        intent.setType("image/*");



        try {
 
            startActivityForResult(intent, FILE_SELECT_CODE);
 
        } catch (android.content.ActivityNotFoundException ex) {
 
        }
 
    }



    private static class MyAdapter extends FragmentPagerAdapter {



        private String[] titles = { "VER FACTURAS", "VER CONSUMO", "INTRODUCIR LECTURA" };



        public MyAdapter(FragmentManager fragmentManager) {
 
            super(fragmentManager);
 
        }



        @Override
 
        public CharSequence getPageTitle(int position) {
 
            return titles[position];
 
        }



        @Override
 
        public Fragment getItem(int position) {
 
            switch (position) {
 
            case 0: // Fragment # 0
 
                return new FacturasActivity();
 
            case 1: // Fragment # 1
 
                return new ConsumoActivity();
 
            case 2:// Fragment # 2
 
                return new LecturaActivity();
 
            }
 
            //return new MyFragment();
 
            return null;
 
        }



        @Override
 
        public int getCount() {
 
            return titles.length;
 
        }
 
    }



}
}


fragment_pager.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 
    xmlns:tools="http://schemas.android.com/tools"
 
    android:layout_width="fill_parent"
 
    android:layout_height="fill_parent"
 
    android:orientation="vertical"
 
    tools:context=".TabsFacturasActivity" >



    <com.viewpagerindicator.TitlePageIndicator
 
        android:id="@+id/indicator"
 
        android:padding="10dip"
 
        android:layout_height="wrap_content"
 
        android:layout_width="fill_parent" />



    <android.support.v4.view.ViewPager
 
        android:id="@+id/pager"
 
        android:layout_width="fill_parent"
 
        android:layout_height="0dp"
 
        android:layout_weight="1"
 
        android:background="#1184A4E8" />


</LinearLayout>


 

处理方法

你不可以通过 fragment activity  获得TextView ,你的TextView布局在 fragment 上,所以  activity 布局无法获得id,你可以通过第三页 fragment来获得

  在你的fragment 中写如下代码

TextView mTextView;
mTextView = (TextView)getView().findViewById(R.id.your_text_view);

 

创建一个类似的函数

public void changeText(String mText)
{
{

mTextView.setText(mText);
}
}


 activity 中这样处理

         Your_Fragment mFragment;
 
         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 
                switch (requestCode) {
 
                    case FILE_SELECT_CODE:
 
                    if (resultCode == RESULT_OK) {




                mFragment.changeText(imgName);



               }


原文地址:http://www.itmmd.com/201501/522.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android学习笔记(47)事件和事件监听器   上一篇
下一篇  android ListView中删除多条数据
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!