【问题标题】:Changing Activity into Fragments so the 'Sliding Activities' are possible将活动更改为片段,以便“滑动活动”成为可能
【发布时间】:2013-11-25 05:38:57
【问题描述】:

我需要创建一个“滑动活动”,当用户滑动它时它会滑动。当用户向左“滑动”它时,Activity 应该向左滑动,新的 Activity 将从右侧出现在屏幕上。你不能把它夹在中间。雅虎邮箱应用程序也是如此。您可以在阅读邮件时看到这一点,然后将邮件向左滑动以移动到下一封邮件。如下所示。

在图片中,您可以看到下一封邮件(标题为“谢谢”)正在从侧面打开。就我而言,它们是两种不同的活动。我们还希望我们可以在当前活动的右侧显示下一个活动的一小部分(就像在 windows 手机中一样),以便用户知道他必须滑动。无论如何,这部分现在是强制性的。

我试图用this answer 来做这件事,但这不是我想要的。请问有什么办法吗?

注意

如果我选择 Fragments,很多类将被更改或完全重新编码。

更新

请看下面的代码。在这里,当我在SalesInquiry.java 上滑动时,NewLead.java 应该是打开的,具有上述说明的效果。

DropDownMenu.java

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class DropDownMenu extends Activity {

    private TextView addInquiry, addEvent, additionalInfo, addToContacts;

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

        //Intializing instance variables
        addInquiry = (TextView)findViewById(R.id.menu_add_inquiry);
        addEvent = (TextView)findViewById(R.id.menu_add_event);
        additionalInfo = (TextView)findViewById(R.id.menu_additional_info);
        addToContacts = (TextView)findViewById(R.id.menu_add_to_contacts);

        //Register the Listeners
        addInquiry.setOnClickListener(new AddInquiryEvent());


    }

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

    //Test Button
    private class AddInquiryEvent implements OnClickListener
    {

        @Override
        public void onClick(View arg0) 
        {
            // TODO Auto-generated method stub
            Intent intent = new Intent(DropDownMenu.this,NewLead.class);
            startActivity(intent);

        }

    }

    public void onMenuItemClicked(View view) {
        switch (view.getId()) {
        case R.id.menu_add_inquiry:
            Intent intent = new Intent(DropDownMenu.this,NewLead.class);
            startActivity(intent);
            break;
        default:;
        }
    }

}

SalesInquery.java

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class SalesInqury extends DropDownMenu {

    private ImageView addNewSalesInqury;
    private RelativeLayout salesInquryMainLayout;
    private TextView testEditSales;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.activity_sales_inqury);

        //Intializing instance variables
        addNewSalesInqury = (ImageView)findViewById(R.id.add_new_sales_inqury_btn);
        salesInquryMainLayout = (RelativeLayout)findViewById(R.id.sales_inqury_main_layout);
        testEditSales = (TextView)findViewById(R.id.testWord);


        //Registering Event handlers
        addNewSalesInqury.setOnClickListener(new addNewSalesInquryEvent());
        salesInquryMainLayout.setOnTouchListener(mainLayoutSwiped);
        testEditSales.setOnClickListener(new OpenSalesDemo()); //TESTING DEMO!!!!!
    }

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

    //Event Handler for Add New Sales Inquery Button
    private class addNewSalesInquryEvent implements OnClickListener
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub
            Intent intent = new Intent(SalesInqury.this,NewLead.class);
            startActivity(intent);

        }

    }

    //SWIP LISTENER
    private  OnTouchListener mainLayoutSwiped = new OnSwipeTouchListener()
    {
        public boolean onSwipeLeft() 
         {
             Intent intent = new Intent(SalesInqury.this,NewLead.class);
             startActivity(intent);
            return true;
         }
    };


    //
    //
    // TESTING FUNCTION!!
    //
    //
    //Testing function for sales lead opening
    private class OpenSalesDemo implements OnClickListener
    {

        @Override
        public void onClick(View arg0) 
        {
            // TODO Auto-generated method stub
            Intent intent = new Intent(SalesInqury.this,EditLeads.class);
            startActivity(intent);

        }

    }

}

【问题讨论】:

标签: java android eclipse android-activity android-animation


【解决方案1】:
            User GestureDetector and in onFling() method check for the direction of swipe and start the activity accordingly  

            Edited:
    Try this:
            GestureDetector gestureDetector = new GestureDetector(
                    simpleOnGestureListener);

        SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener() {

                // Move The Background Theme To Select The Theme
                @Override
                public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                        float velocityY) {

                    float sensitvity = 100;

                    if ((e1.getX() - e2.getX()) > sensitvity) {

    //Move right ,start new Activity here
return true;
        }else if ((e2.getX() - e1.getX()) > sensitvity) {
    //Move left ,start new Activity here
return true;
        }else{
return false ;
}
}

@Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        return (gestureDetector.onTouchEvent(event) || super
                .onTouchEvent(event));
    }

【讨论】:

  • 我也在 Google 群组中看到了 rthis。可以发个例子吗?
【解决方案2】:

您可以使用片段代替活动

试试viewpager库,看看

http://viewpagerindicator.com/

【讨论】:

  • 如果我选择 Fragments,很多类将被更改或完全重新编码。
  • 对不起,伙计们!@ᴀʀᴜnBᴇrtiL 但我认为至少你很聪明,可以找到答案。抱歉@Artificial_Intelligence 但我认为没有其他方法可以在不使用片段的情况下做到这一点。
【解决方案3】:

您可以简单地使用 Fragments 精确 SupportFragment 和 ViewPager,这将允许您在不同的片段中滑动。它在 android.support.v4 库中可用。

【讨论】:

  • 如果我选择 Fragments,很多类将被更改或完全重新编码。
  • 那我得看看你的代码,因为只有这样我才能知道要做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多