通过操作栏

时间:2015-11-15 02:55:54

标签: java android android-fragments android-actionbar android-actionbar-tabs

我必须得到一个Fragment的x y坐标并将其用作文本

但是我无法在onTouchEvent找到Fragment,所以我不知道如何做到这一点。

这是我的代码。

package com.example.gshs14115.projectmiddle;

import android.app.ActionBar;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class FragmentsTabs extends AppCompatActivity{
    FragmentTab1 t1;
    FragmentTab2 t2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        t1 = new FragmentTab1();
        t2 = new FragmentTab2();
        super.onCreate(savedInstanceState);
        final android.support.v7.app.ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(android.support.v7.app.ActionBar.NAVIGATION_MODE_TABS);
        actionBar.setDisplayOptions(0, android.support.v7.app.ActionBar.DISPLAY_SHOW_TITLE);
        TabListener<FragmentTab1> tab1TabListener = new TabListener<>(this,"tab1",FragmentTab1.class);
        t1 = (FragmentTab1)tab1TabListener.mFragment;
        TabListener<FragmentTab2> tab2TabListener = new TabListener<FragmentTab2>(this, "tab2", FragmentTab2.class);
        t2 = (FragmentTab2)tab2TabListener.mFragment;
        actionBar.addTab(actionBar.newTab().setText("Tab1").setTabListener(tab1TabListener));
        actionBar.addTab(actionBar.newTab().setText("Tab2").setTabListener(tab2TabListener));
        if(savedInstanceState != null)
        {
            actionBar.setSelectedNavigationItem(savedInstanceState.getInt("selectedTab",0));
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("selectedTab",getActionBar().getSelectedNavigationIndex());

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int x = (int)event.getX();
        int y = (int)event.getY();
        switch(event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
                t1.log = "[X : "+x+"Y: "+y+"]";

                break;
            case MotionEvent.ACTION_MOVE:
                x = (int)event.getX();
                y = (int)event.getY();
                t1.log = "[X : "+x+"Y : "+y+"]";
                break;
            case MotionEvent.ACTION_UP:
                t1.log = "[X : Y: ]";
                break;
        }
        t1.logText.setText(t1.log);
        return super.onTouchEvent(event);
    }
}

package com.example.gshs14115.projectmiddle;

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import org.w3c.dom.Text;

/**
 * Created by Gshs14115 on 2015-11-14.
 */
public class FragmentTab1 extends android.support.v4.app.Fragment implements View.OnClickListener{
    Button btn_graph_back;
    TextView logText;
    String log;
    String result;
    Calculator calc;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.activity_graph,container,false);
        logText = (TextView)v.findViewById(R.id.text_log);
        btn_graph_back = (Button)v.findViewById(R.id.btn_graph_back);
        btn_graph_back.setOnClickListener(this);
        return v;
    }

    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.btn_graph_back)
        {
            System.exit(0);
        }
    }
}

package com.example.gshs14115.projectmiddle;

import android.app.Activity;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

/**
 * Created by Gshs14115 on 2015-11-14.
 */
public class TabListener<T  extends Fragment> implements android.support.v7.app.ActionBar.TabListener {

    private final AppCompatActivity mActivity;
    private final String mTag;
    public final Class<T> mClass;
    public Fragment mFragment;
    public TabListener(AppCompatActivity activity,String tag,Class<T> clz)
    {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
        if(mFragment !=null && !mFragment.isDetached())
        {
            android.support.v4.app.FragmentTransaction fragmentTransaction = mActivity.getSupportFragmentManager().beginTransaction();
            fragmentTransaction.detach(mFragment);
            fragmentTransaction.commit();
        }
    }

    @Override
    public void onTabSelected(android.support.v7.app.ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {
        if(mFragment == null ){
            mFragment = Fragment.instantiate(mActivity,mClass.getName(),null);
            ft.add(android.R.id.content,mFragment,mTag);
        } else {
            ft.attach(mFragment);
        }
    }

    @Override
    public void onTabUnselected(android.support.v7.app.ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {
        if(mFragment != null)
        {
            ft.detach(mFragment);
        }
    }

    @Override
    public void onTabReselected(android.support.v7.app.ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {
        Toast.makeText(mActivity,"onTabReselected!",Toast.LENGTH_LONG).show();
    }
}

我想在FragmentsTabs.java上获得X Y坐标,但我不知道如何访问该对象上的FragmentTab1。有什么帮助吗?

0 个答案:

没有答案
相关问题