在Long Click上显示活动并在发布时关闭/隐藏(ACTION_UP)

时间:2014-03-22 07:14:55

标签: android

我想要什么

长时间点击文本视图时应该打开一个显示其详细信息的新活动,当放开时,即当触发onTouch ACTION_UP事件时,它应该关闭新打开的活动。

我如何努力实现此目标

主要活动代码:

    Intent intent = new Intent( (this, ShowDetailActivity.class);
    startActivity(intent);

ShowDetailActivity代码:

    //OnCreate method
    view.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent event) {
                    // Log.i("INFO", "ontouch event");
                    if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
                        Log.d("TouchTest", "Touch down");
                    } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
                        Log.d("TouchTest", "Touch up");
                        onBackPressed();
                    }
                    return true;
                }
            }); 

    @Override
    public void onBackPressed() {
    Log.i("INFO", "GOing back");
    super.onBackPressed();
}

问题

它工作正常,除了必须重新点击新打开的细节活动以关闭的事实。我希望我长按文本视图,当活动打开时,它会在同一个点击发布时关闭,它会在我发布的新点击中发布。

编辑: 我更改了问题标题:将事件监听器从一个活动传递到另一个活动

1 个答案:

答案 0 :(得分:0)

在做了一些研究之后,我发现只有在创建一个活动后才会注册活动事件,所以对于一个活动来处理必须注册事件的ACTION_UP事件。

因此,在我的情况下,活动不是一个选项,我不得不使用片段,这是你需要做的能够使用片段

  1. 您需要拥有片段的布局应为 RelativeLayout
  2. 您需要展示片段的活动应该是 FragmentActivity 的孩子
  3. 这是MainActivity

      public class MainActivity extends FragmentActivity {
            FrameLayout fl; 
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                fl = (FrameLayout) findViewById(R.id.frameTitle);
                TextView txtView = (TextView) findViewById(R.id.txt_view);
                txtView.setOnLongClickListener(new OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View arg0) {
                        sendMessage();
                        return true;
                    }
                });
                txtView.setOnTouchListener(new OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
                        }
                        else if (event.getAction() == android.view.MotionEvent.ACTION_UP){
                            fl.setVisibility(View.GONE);
                        }
                        return false;
                    }
                });
            }
            public void sendMessage(){
                fl.setVisibility(View.VISIBLE);
            }
        }
    

    这是布局:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
        <TextView
             android:id="@+id/txt_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
        <Button
            android:id="@+id/sign_in_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/txt_view"
            android:layout_marginTop="42dp"
            android:layout_toRightOf="@+id/txt_view"
            android:text="@string/button_send" />
        <FrameLayout
                android:id="@+id/frameTitle"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:visibility="gone">
        <fragment 
              android:id="@+id/msg_fragment"
                android:name="com.example.holdview.MsgFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                />
        </FrameLayout>
    
    </RelativeLayout>