从 ViewPager 中的 FragmentActivity 获取 Fragment 中 TextView 的 id [英] Get id of TextView in Fragment from FragmentActivity in ViewPager

查看:15
本文介绍了从 ViewPager 中的 FragmentActivity 获取 Fragment 中 TextView 的 id的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用带有 3 个 FragmentsViewPager,我想在第三页中更改 TextView 的文本.

I'm working with ViewPager with 3 Fragments and I want to change text of TextView in third page.

在那个页面中,我有一个 Button,当按下它时,转到 SD 图像以选择一个.完成后,返回页面并希望使用该图像的路径更新 TextView.问题是,当我尝试从 FragmentActivity 访问该 TextView 时,它为空.

In that page I have a Buttonthat when its pressed, go to SD images to select one. When done, returns to page and want to update TextView with path of that image. The problem is that when I try to access that TextViewfrom FragmentActivityit is 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);

        /** Create an array adapter to populate dropdownlist */
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                getBaseContext(), android.R.layout.simple_spinner_dropdown_item, direcciones);

        /** Enabling dropdown list navigation for the action bar */
        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        /** Defining Navigation listener */
        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 访问文本视图,因为它位于 fragment 和你的 fragment活动布局 没有任何具有此id文本视图.您必须从您在 layout 中使用它的 third fragment 访问文本视图.然后从您的 fragment 活动 访问该 object.

You cant access text view from fragment activity because its located on fragment and your fragment activity layout don't have any text view with this id. You have to access text view from your third fragment where you used it in its layout. Then access that object from your fragment activity.

在你的片段中做这样的事情

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

创建这样的函数

public void changeText(String mText)
{
mTextView.setText(mText);
}

在您的活动结果中

//Do not create new object each time you set text. Use the same fragment object which you use for view pager.
        Your_Fragment mFragment;
         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                switch (requestCode) {
                    case FILE_SELECT_CODE:
                    if (resultCode == RESULT_OK) {

    //Set text from here
                mFragment.changeText(imgName);

               }

这篇关于从 ViewPager 中的 FragmentActivity 获取 Fragment 中 TextView 的 id的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆