Search code examples
javaandroidandroid-layouttextviewandroid-viewpager

Altering TextView on another View


When altering a TextView on a viewPage the TextView value is never updated. The reference to it resolves or it seems to but after setting visibility to false or using setText I do not see a change in the View.

I may be going about this all wrong any help is appreciated.

Main.java

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.AlertDialog;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends FragmentActivity implements TabListener 
{
    RelativeLayout layout_joystick;
    RelativeLayout layout_left_right_joy;
    ImageView image_joystick, image_border;
    TextView textView1, textView2, textView3, textView4, textView5,     textView6,textView7,textView8,textView9,textView10;
    TextView debugLabel;
    Boolean debug;
    JoyStickClass js;
    RotationStickClass js2;
    private ViewPager viewPager;
    private TabPagerAdapter tabPagerAdapter;



    public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    //Removes Title
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    //Remove notification bar
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.main);
    LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final ViewGroup vi = (ViewGroup)inflater.inflate(R.layout.first_tab, null, false);

    textView1 = (TextView)vi.findViewById(R.id.textView1);
    textView2 = (TextView)vi.findViewById(R.id.textView2);
    textView3 = (TextView)vi.findViewById(R.id.textView3);
    textView4 = (TextView)vi.findViewById(R.id.textView4);
    textView5 = (TextView)vi.findViewById(R.id.textView5);

    textView6 = (TextView)vi.findViewById(R.id.textView6);
    textView7 = (TextView)vi.findViewById(R.id.textView7);
    textView8 = (TextView)vi.findViewById(R.id.textView8);
    textView9 = (TextView)vi.findViewById(R.id.textView9);
    textView10 = (TextView)vi.findViewById(R.id.textView10);

    debugLabel = (TextView)findViewById(R.id.debugLabel);


    viewPager = (ViewPager) findViewById(R.id.viewPager);
    tabPagerAdapter = new TabPagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(tabPagerAdapter);

    //Fragment vif = tabPagerAdapter.getItem(1);
    //View vi2 = vif.getView();
    //textView2 = (TextView) vi2.findViewById(R.id.textView2);
    //textView2.setText("Does this work");

    layout_joystick = (RelativeLayout)findViewById(R.id.layout_joystick);
    layout_left_right_joy = (RelativeLayout)findViewById(R.id.layout_joystick2);

    js = new JoyStickClass(getApplicationContext(), layout_joystick, R.drawable.image_button);
    js.setStickSize(75, 75);
    js.setLayoutSize(250,250);
    js.setLayoutAlpha(250);
    js.setStickAlpha(100);
    js.setOffset(30);
    js.setMinimumDistance(0);

    js2 = new RotationStickClass(getApplicationContext(), layout_left_right_joy, R.drawable.image_button);
    js2.setStickSize(75, 75);
    js2.setLayoutSize(250, 250);
    js2.setLayoutAlpha(250);
    js2.setStickAlpha(100);
    js2.setOffset(30);
    js2.setMinimumDistance(0);

    layout_joystick.setOnTouchListener(new OnTouchListener() 
    {
        public boolean onTouch(View arg0, MotionEvent arg1) {
            js.drawStick(arg1);
            if(arg1.getAction() == MotionEvent.ACTION_DOWN
                    || arg1.getAction() == MotionEvent.ACTION_MOVE) {
                textView1.setText("X : " + String.valueOf(js.getX()));
                textView2.setText("Y : " + String.valueOf(js.getY()));
                textView3.setText("Angle : " + String.valueOf(js.getAngle()));
                textView4.setText("Distance : " + String.valueOf(js.getDistance()));

                int direction = js.get8Direction();
                if(direction == JoyStickClass.STICK_UP) {
                    textView5.setText("Direction : Up");
                } else if(direction == JoyStickClass.STICK_UPRIGHT) {
                    textView5.setText("Direction : Up Right");
                } else if(direction == JoyStickClass.STICK_RIGHT) {
                    textView5.setText("Direction : Right");
                } else if(direction == JoyStickClass.STICK_DOWNRIGHT) {
                    textView5.setText("Direction : Down Right");
                } else if(direction == JoyStickClass.STICK_DOWN) {
                    textView5.setText("Direction : Down");
                } else if(direction == JoyStickClass.STICK_DOWNLEFT) {
                    textView5.setText("Direction : Down Left");
                } else if(direction == JoyStickClass.STICK_LEFT) {
                    textView5.setText("Direction : Left");
                } else if(direction == JoyStickClass.STICK_UPLEFT) {
                    textView5.setText("Direction : Up Left");
                } else if(direction == JoyStickClass.STICK_NONE) {
                    textView5.setText("Direction : Center");
                }
            } else if(arg1.getAction() == MotionEvent.ACTION_UP) {
                textView1.setText("X :");
                textView2.setText("Y :");
                textView3.setText("Angle :");
                textView4.setText("Distance :");
                textView5.setText("Direction :");
            }
            tabPagerAdapter.notifyDataSetChanged();


            return true;
        }
    });

    layout_left_right_joy.setOnTouchListener(new OnTouchListener() 
    {
        public boolean onTouch(View arg0, MotionEvent arg1) {
            js2.drawStick(arg1);
            if(arg1.getAction() == MotionEvent.ACTION_DOWN
                    || arg1.getAction() == MotionEvent.ACTION_MOVE) {
                textView6.setText("X : " + String.valueOf(js2.getX()));
                textView7.setText("Y : " + String.valueOf(js2.getY()));
                textView8.setText("Angle : " + String.valueOf(js2.getAngle()));
                textView9.setText("Distance : " + String.valueOf(js2.getDistance()));

                int direction = js2.get8Direction();
                if(direction == JoyStickClass.STICK_UP) {
                    textView10.setText("Direction : Up");
                } else if(direction == JoyStickClass.STICK_UPRIGHT) {
                    textView10.setText("Direction : Up Right");
                } else if(direction == JoyStickClass.STICK_RIGHT) {
                    textView10.setText("Direction : Right");
                } else if(direction == JoyStickClass.STICK_DOWNRIGHT) {
                    textView10.setText("Direction : Down Right");
                } else if(direction == JoyStickClass.STICK_DOWN) {
                    textView10.setText("Direction : Down");
                } else if(direction == JoyStickClass.STICK_DOWNLEFT) {
                    textView10.setText("Direction : Down Left");
                } else if(direction == JoyStickClass.STICK_LEFT) {
                    textView10.setText("Direction : Left");
                } else if(direction == JoyStickClass.STICK_UPLEFT) {
                    textView10.setText("Direction : Up Left");
                } else if(direction == JoyStickClass.STICK_NONE) {
                    textView10.setText("Direction : Center");
                }
            } else if(arg1.getAction() == MotionEvent.ACTION_UP) {
                textView6.setText("X :");
                textView7.setText("Y :");
                textView8.setText("Angle :");
                textView9.setText("Distance :");
                textView10.setText("Direction :");
            }
            tabPagerAdapter.notifyDataSetChanged();

            return true;
        }
    });

    ImageView imgr2d2 = (ImageView) findViewById(R.id.r2d2);
    imgr2d2.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            try 
            {
                MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.r2d2);
                mediaPlayer.start();
            } catch (IllegalStateException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    });
    debug=true;
    final ImageView imgDebug = (ImageView) findViewById(R.id.debug);
    imgDebug.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            if (debug==true)
            {
                imgDebug.setImageResource(R.drawable.toggle_off);
                debug=false;
                textView1.setVisibility(View.GONE);
                textView2.setVisibility(View.GONE);
                textView3.setVisibility(View.GONE);
                textView4.setVisibility(View.GONE);
                textView5.setVisibility(View.GONE);
                textView6.setVisibility(View.GONE);
                textView7.setVisibility(View.GONE);
                textView8.setVisibility(View.GONE);
                textView9.setVisibility(View.GONE);
                textView10.setVisibility(View.GONE);
            }
            else
            {
                imgDebug.setImageResource(R.drawable.toggle_on);
                textView1.setVisibility(View.VISIBLE);
                textView2.setVisibility(View.VISIBLE);
                textView3.setVisibility(View.VISIBLE);
                textView4.setVisibility(View.VISIBLE);
                textView5.setVisibility(View.VISIBLE);
                textView6.setVisibility(View.VISIBLE);
                textView7.setVisibility(View.VISIBLE);
                textView8.setVisibility(View.VISIBLE);
                textView9.setVisibility(View.VISIBLE);
                textView10.setVisibility(View.VISIBLE);
                debug=true;
            }

            tabPagerAdapter.notifyDataSetChanged();



        }

    });
}
        debug=true;
        final ImageView imgDebug = (ImageView) findViewById(R.id.debug);
        imgDebug.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                if (debug==true)
                {
                    imgDebug.setImageResource(R.drawable.toggle_off);
                    debug=false;
                    textView1.setVisibility(View.GONE);
                    textView2.setVisibility(View.GONE);
                    textView3.setVisibility(View.GONE);
                    textView4.setVisibility(View.GONE);
                    textView5.setVisibility(View.GONE);
                    textView6.setVisibility(View.GONE);
                    textView7.setVisibility(View.GONE);
                    textView8.setVisibility(View.GONE);
                    textView9.setVisibility(View.GONE);
                    textView10.setVisibility(View.GONE);
                }
                else
                {
                    imgDebug.setImageResource(R.drawable.toggle_on);
                    textView1.setVisibility(View.VISIBLE);
                    textView2.setVisibility(View.VISIBLE);
                    textView3.setVisibility(View.VISIBLE);
                    textView4.setVisibility(View.VISIBLE);
                    textView5.setVisibility(View.VISIBLE);
                    textView6.setVisibility(View.VISIBLE);
                    textView7.setVisibility(View.VISIBLE);
                    textView8.setVisibility(View.VISIBLE);
                    textView9.setVisibility(View.VISIBLE);
                    textView10.setVisibility(View.VISIBLE);
                    debug=true;
                }

                tabPagerAdapter.notifyDataSetChanged();


            }

        });
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }   
}

TabPagerAdapter.java

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class TabPagerAdapter extends FragmentPagerAdapter 
{
private final List<Fragment> fragmentList;

public TabPagerAdapter(FragmentManager fm) 
{
    super(fm);
    fragmentList = new ArrayList<Fragment>();
    fragmentList.add(new FirstTab());
    fragmentList.add(new SecondTab());
    fragmentList.add(new ThirdTab());
}


 @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

 @Override
    public int getItemPosition(Object object) {
        return POSITION_UNCHANGED;
    }

    @Override
    public int getCount() 
    {
        return fragmentList.size();
    }
}

FirstTab.java

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FirstTab extends Fragment 
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {

        View v = inflater.inflate(R.layout.first_tab, container, false);
        return v;
    }
}

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="@color/black"
    android:layout_height="match_parent" >

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="#00cd00" >

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

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:layout_centerInParent="true"
        android:background="@color/black"
        android:orientation="vertical" >

        <TextView 
            android:id="@+id/debugLabel"
            android:layout_width="70dp"
            android:layout_height="wrap_content"
            android:text="Debug"
            android:textColor="#444444"
            android:textSize="15dp"
            android:layout_centerHorizontal="true"
            />
        <ImageView
            android:id="@+id/debug"
            android:layout_width="70dp"
            android:layout_height="50dp"
            android:src="@drawable/toggle_on"
            />

    </LinearLayout>

    <RelativeLayout
        android:id="@+id/layout_joystick"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="5dp"
        android:background="@drawable/image_button_bg" >
    </RelativeLayout>
    <ImageView
        android:id="@+id/r2d2"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@drawable/r2d2"
        android:layout_marginBottom="0dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        />

    <RelativeLayout
        android:id="@+id/layout_joystick2"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginRight="5dp"
        android:background="@drawable/left_right_joy" >
    </RelativeLayout>
</RelativeLayout>

first_tab.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/DebugRelativeLayout"
    android:layout_width="match_parent"
    android:background="@color/black"
    android:layout_height="match_parent" >
<LinearLayout
    android:id="@+id/TextviewLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@color/black"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="X"
        android:textColor="#444444"
        android:textSize="20dp" />
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Y"
        android:textColor="#444444"
        android:textSize="20dp" />
    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Angle"
        android:textColor="#444444"
        android:textSize="20dp" />
    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Distance"
        android:textColor="#444444"
        android:textSize="20dp" />
    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Direction"
        android:textColor="#444444"
        android:textSize="20dp" />
</LinearLayout>
<LinearLayout
    android:id="@+id/TextviewLayout2"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_marginRight="50dp"
    android:layout_alignParentTop="true"
    android:background="@color/black"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="X"
        android:textColor="#444444"
        android:textSize="20dp" />
    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Y"
        android:textColor="#444444"
        android:textSize="20dp" />
    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Angle"
        android:textColor="#444444"
        android:textSize="20dp" />
    <TextView
        android:id="@+id/textView9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Distance"
        android:textColor="#444444"
        android:textSize="20dp" />
    <TextView
        android:id="@+id/textView10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Direction"
        android:textColor="#444444"
        android:textSize="20dp" />
    </LinearLayout>
</RelativeLayout>

Solution

  • I see three problems here:

    1. After you modify your TextView s, you never call tabPagerAdapter.notifyDataSetChanged() which would cause the adapter to refresh.

    2. In the getItem() method of your adapter you recreate your fragments everytime the method is called. And recreation means that the fragments appear in their original state. Generally you want to avoid recreation in a ListView. So either pass a list with your fragments to the adapter or create this list within its constructor.

    3. If I am not mistaken calling invalidate() on your ViewGroup is not necessary.

    You should work on your adapter. Maybe this basic implementation will help you.

    public class TabPagerAdapter extends FragmentStatePagerAdapter {
        private final List<Fragment> fragmentList;
    
        public FragmentsPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
        fragmentList = new ArrayList<>();
        fragmentList.add(new FirstTab());
        fragmentList.add(new SecondTab());
        fragmentList.add(new ThirdTab());
        }
    
        @Override
        public int getCount() {
            return fragmentList.size();
        }
    
        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }
    
        @Override
        public int getItemPosition(Object object) {
            return POSITION_UNCHANGED;
        }
    }