当前位置: 首页 > 知识库问答 >
问题:

将活动更改为片段,使“滑动活动”成为可能

詹亮
2023-03-14

我需要创建一个“滑动活动”,当用户滑动它时它会滑动。当用户向左“滑动”时,活动应该向左滑动,新的活动会从右侧来到屏幕上。你不能把它放在中间。同样的事情发生在雅虎邮件应用程序中。你可以在阅读邮件时看到这个,向左滑动邮件移动到下一封邮件。就像下面一样。

在图中,您可以看到下一封邮件(标题为“谢谢”)正在从侧面打开。在我的例子中,它们是两种不同的活动。我们还建议在当前活动的右侧显示下一个活动的一小部分(如在windows phones中),以便用户知道他必须刷卡。无论如何,这一部分现在是强制性的。

我试着用这个答案来回答,但这不是我想要的。有什么想法吗?

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

更新

请看下面的代码。在这里,当我滑动SalesInquiry时。java是NewLead。java应该是开放的,具有上面解释的效果。

下拉菜单。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);

        }

    }

}

共有3个答案

怀刚毅
2023-03-14

您可以简单地使用Fragments和ViewPager,这将允许您浏览不同的Fragments。它在android中可用。支持v4库。

吕承福
2023-03-14

您可以使用片段而不是活动

尝试viewpager库,请参阅

http://viewpagerindicator.com/

司马渝
2023-03-14
            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));
    }
 类似资料:
  • 问题内容: 我想将自己更改为我尝试过的内容,但无法将我的活动更改为片段。有人可以告诉我该怎么做吗?在哪里编辑我是Android上的新手。请告诉我和在此先感谢 这是我的活动: 问题答案: 只要了解一些步骤,您就可以现在和将来轻松地将Activity转换为Fragment ..: 首先,不要扩展,只要扩展.. 例如: 然后覆盖.. 然后通过LayoutInflater扩展布局,并分配给进一步用于子视图

  • 我这么问的原因是因为我多年来一直在专门使用活动,Facebook SDK和Google Maps 2.0迫使我使用片段,现在我想知道与其他实现相比,它们是否本质上“更好”。 如果这个“不具建设性”或“过于开放”,那么答案显然是“不”。但是如果有一些谷歌开发者的文档或博客关于这个确切的主题,那么我想知道它

  • 我现在真的很困惑,因为每当我创建一个新的带有空白活动的Android应用程序时,它总是fragment_main.xml.我只是想创建一个没有片段的空白活动。 在第一幅图中,空白活动带有片段布局: 第二个图像显示了创建的fragment_main 现在我真的很困惑…这只发生在将ADT更新到最新版本之后。我提到了这个线程:Adt不创建默认的hello world,但命令行创建_ 我只是想制作一个An

  • 我创建了一个带有“底部导航活动”的新项目: 这是生成的代码: 如何使用底部栏更改为新片段?例如,我有3个片段:Fragment1 Fragment2和Fragment3,我想用底部栏中的3个按钮更改为它们。我还想通过左右滑动手指来切换片段,我该怎么做?

  • 我在处理活动和碎片时遇到了一些麻烦。我正处于应用程序开发的早期阶段,最终希望设计一种最有效的方法来整合两个独立的屏幕。 每种方法的好处是什么?你会选择哪种设计?

  • 有什么理由不不分青红皂白地这样做而不重新评估我使用片段的每个单独的情况吗?