Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免在我的Android应用程序中重复按钮代码_Java_Android - Fatal编程技术网

Java 避免在我的Android应用程序中重复按钮代码

Java 避免在我的Android应用程序中重复按钮代码,java,android,Java,Android,我当时正在开发,我想到了在用Java开发Android时遇到的一个小问题。我有一节主要的活动课。视图只是一些按钮,每个按钮都调用不同的活动。现在我有这个密码 public class MainActivity extends AppCompatActivity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIn

我当时正在开发,我想到了在用Java开发Android时遇到的一个小问题。我有一节主要的活动课。视图只是一些按钮,每个按钮都调用不同的活动。现在我有这个密码

public class MainActivity extends AppCompatActivity {
    private Button button;

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

    button = findViewById(R.id.pedidos);

    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), PedidosActivity.class);
            startActivity(intent);
        }
    });
}
因此,考虑到我需要再添加两个按钮,以便根据我按下的按钮启动两个不同的活动,我需要两个按钮,对我在项目中添加的每个新活动重复此代码n次。我相信一定有更好的办法来做到这一点。我已经想到我可以做一个工厂模式,使用一个类作为接口,使用一个方法callActivity(),如下所示:

public interface ActivityFactory(){
public OnClickListener setOnClickListener();
}
此方法将通过参数接收实例化新视图的活动的上下文,这是一种枚举类型,具有不同的视图作为参数,它将为按钮返回一个新的eventListener,该按钮将使您进入新视图,如下所示:

@Override
button.setOnClickListener(getContextActivity(), EnumClass.NewActivity);
我还没有找到任何关于这个主题的帖子/博客/帖子,可能是因为我还是Android开发的新手,但我发现这对任何Android开发人员来说都非常有趣和有价值,所以任何一种方法都是值得赞赏的

编辑:
我想我留下了部分解释,所以我将在这里添加它。我想跳过新两个按钮的实例化,因此我想知道只实例化一个按钮的方法,并根据您按下的按钮为其提供视图值。

您可以创建一个
视图。OnClickListener
并在多个按钮中使用它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    findViewById(R.id.button_1).setOnClickListener(mButtonsClickListener);
    findViewById(R.id.button_2).setOnClickListener(mButtonsClickListener);
    ....
}


private View.OnClickListener mButtonsClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button_1:
                // Actions for button 1
                break;
            case R.id.button_2:
                // Actions for button 2
                break;

        }
    }
};

您可以创建单个
视图。OnClickListener
并在多个按钮中使用它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    findViewById(R.id.button_1).setOnClickListener(mButtonsClickListener);
    findViewById(R.id.button_2).setOnClickListener(mButtonsClickListener);
    ....
}


private View.OnClickListener mButtonsClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button_1:
                // Actions for button 1
                break;
            case R.id.button_2:
                // Actions for button 2
                break;

        }
    }
};

实现
视图。OnClickListener
之后,您可以添加按钮的
findViewByid
,然后获取按钮的
名称和
setOnClickListener(此)
类似于
按钮。setOnClickListener(此)

请参阅下面的代码:

public class EventsListActivity extends AppCompatActivity implements View.OnClickListener{

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_events_list);

        init();
    }
    private void init() {
        txtClose = (TextView) findViewById(R.id.txtClose);
        txtClose.setOnClickListener(this);

        txtAdd = (TextView) findViewById(R.id.txtAdd);
        txtAdd.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {

        case R.id.txtAdd:
            Intent intent = new Intent(this, AddEventActivity.class);
            startActivity(intent);
        break;

        case R.id.txtClose:
            finish();
        break;      
    }
}

实现
视图。OnClickListener
之后,您可以添加按钮的
findViewByid
,然后获取按钮的
名称和
setOnClickListener(此)
类似于
按钮。setOnClickListener(此)

请参阅下面的代码:

public class EventsListActivity extends AppCompatActivity implements View.OnClickListener{

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_events_list);

        init();
    }
    private void init() {
        txtClose = (TextView) findViewById(R.id.txtClose);
        txtClose.setOnClickListener(this);

        txtAdd = (TextView) findViewById(R.id.txtAdd);
        txtAdd.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {

        case R.id.txtAdd:
            Intent intent = new Intent(this, AddEventActivity.class);
            startActivity(intent);
        break;

        case R.id.txtClose:
            finish();
        break;      
    }
}
看这个

Class<?> c = Class.forName("SecondPage");
Intent newActivity = new Intent(this, c);
Class c=Class.forName(“第二页”);
意向新活动=新意向(本,c);
看看这个

Class<?> c = Class.forName("SecondPage");
Intent newActivity = new Intent(this, c);
Class c=Class.forName(“第二页”);
意向新活动=新意向(本,c);

使用黄油刀

它将绑定所有视图,便于编码

例如:

对于处理点击

利用这个,

@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(View view) {
    switch (view.getId()) {
    case R.id.door1:

        break;
    case R.id.door2:

        break;
    case R.id.door3:

        break;
    default:

        break;
    }
}
并在Android studio中添加Android ButterKnife Zelezny插件

有关更多信息,请查看此


希望它能对你有所帮助。

利用黄油刀

它将绑定所有视图,便于编码

例如:

对于处理点击

利用这个,

@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(View view) {
    switch (view.getId()) {
    case R.id.door1:

        break;
    case R.id.door2:

        break;
    case R.id.door3:

        break;
    default:

        break;
    }
}
并在Android studio中添加Android ButterKnife Zelezny插件

有关更多信息,请查看此

希望它能对你有所帮助。

你可以随心所欲- 假设你有活动A、B和C 您想从HomeActivity呼叫A、B和C

首先在HomeActivity布局中放置线性布局,如下所示-

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_add_event"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    <!--Your container will hold your buttons-->
    <LinearLayout 
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        />
    </RelativeLayout>
}

现在只需在数组中添加新的类类型和名称。您的代码可以自行运行

您可以按以下方式执行- 假设你有活动A、B和C 您想从HomeActivity呼叫A、B和C

首先在HomeActivity布局中放置线性布局,如下所示-

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_add_event"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    <!--Your container will hold your buttons-->
    <LinearLayout 
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        />
    </RelativeLayout>
}


现在只需在数组中添加新的类类型和名称。你的代码可以自己工作

这里是答案这里是答案使用这组代码显示如果你正在创建大型应用程序使用这把
黄油刀
,@MohammadAli ButterKnife有助于防止样板代码。它的使用和理解都非常简单。试一下,你会喜欢的。是的,我会在我的客户端应用程序中使用它,兄弟,但它会创建大量的代码,所以我会很容易地告诉你@sachinway,我想你没有意识到它,不需要自己键入。将鼠标指向onCreate中的R.layout.xmlname,Alt+fn+insert将自动绑定所有视图,Android ButterKnife Zelezny,查看一下。好的,兄弟,我一定会检查一下,谢谢你的建议:)@SachinVarmausing这组代码显示如果你正在创建大型应用程序,使用这把
ButterKnife
,@MohammadAli ButterKnife有助于防止样板代码。它的使用和理解都非常简单。试一下,你会喜欢的。是的,我会在我的客户端应用程序中使用它,兄弟,但它会创建大量的代码,所以我会很容易地告诉你@sachinway,我想你没有意识到它,不需要自己键入。将鼠标指向onCreate中的R.layout.xmlname,Alt+fn+insert将自动绑定所有视图,Android ButterKnife Zelezny,查看一下。好的,兄弟,我一定会检查这个谢谢你的建议:)@SachinVarmaThis正是我要找的,非常感谢。我认为这是最好的解决方案,可以用来实例化多个按钮,这样一个Android主类只需一段代码!并非有意不尊重其他用户或他们的评论,这里的所有评论都帮助我从不同的角度来看待这一点。谢谢大家!!这正是我想要的,非常感谢。我认为这是最好的解决方案,可以用来实例化多个按钮,这样一个Android主类只需一段代码!并非有意不尊重其他用户或他们的评论,这里的所有评论都帮助我从不同的角度来看待这一点。谢谢大家!!