我正在开发中,我想到了我在使用Java进行Android开发时遇到的一个小问题。我有这个MainActivity类。视图只是一些按钮,每个按钮调用不同的活动。现在我有这个代码
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);
}
});
}
所以,考虑到我需要再添加两个按钮,所以我可以根据我按下哪个按钮开始另外两个不同的活动,我需要为我在项目中添加的每个新活动重复两次这个代码。我相信必须有更好的方法来做到这一点。我已经认为我可以做一个工厂模式,使用类作为接口,方法是callActivity()像这样:
public interface ActivityFactory(){
public OnClickListener setOnClickListener();
}
此方法将通过参数接收实例化新活动的上下文,一个具有不同视图作为参数的枚举类型,并且它将返回一个新的eventListener,用于使您进入新视图的按钮,像这样:
@Override
button.setOnClickListener(getContextActivity(), EnumClass.NewActivity);
我还没有找到关于这个主题的任何帖子/博客/帖子,也许是因为我仍然是Android开发的新手,但我觉得这对任何Android开发者来说非常有趣和有价值,所以任何一种方法真的很受欢迎。
编辑: 我想我留下了部分解释,所以我会在这里添加。我想跳过新两个按钮的实例化,所以我想知道只实例化一个按钮并根据你按下哪个按钮给它视图的值。
答案 0 :(得分:2)
您可以创建一个View.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;
}
}
};
答案 1 :(得分:1)
使用 ButterKnife ,
它将绑定您的所有视图,易于编码
例如:
class ExampleActivity extends Activity {
@BindView(R.id.title) TextView title;
@BindView(R.id.subtitle) TextView subtitle;
@BindView(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}
并处理点击,
利用这个,
@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插件。
了解更多信息,请查看此http://jakewharton.github.io/butterknife/
希望它可以帮助你。答案 2 :(得分:1)
你可以这样做 - 假设你有活动A,B和C. 您想从HomeActivity调用A,B和C
首先将HomeLctivity布局中的LinearLayout设置为 -
<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>
现在在HomeActivity
中创建一个类数组 -
public class HomeActivity extends AppCompatActivity implements View.OnClickListener{
private Class[] arrayClass= {A.class, B.class,C.class}; // classes you want to open
private String[] buttonNames= {"A", "B", "C"}; // button texts
@Override
protected void onCreate(Bundle savedInstanceState) {
LinearLayout container = (LinearLayout)findViewId(R.id.container);
// adding buttons in container
for(int index=0;index<arrayClass.length && arrayClass.lenght == buttonNames.length; index++){
Button button = new Button(this);
button.setText(buttonNames[index]);
button.setOnClickListener(this)
button.setTag(arrayClass[index]);
container.addView(button);
}
}
@Override
public void onClick(View v) {
if(v.getTag() instanceOf Class ){
// will open your particular activity
startActivity(new Intent(this,(Class)v.getTag()));
}
}
}
现在只需在数组中添加新的类类型和名称。你的代码自己运作
答案 3 :(得分:0)
implements
View.OnClickListener
之后您可以添加findViewByid
按钮,然后获取button
个名称和setOnClickListener(this);
LIKE { {1}}
请参阅下面的代码:
button.setOnClickListener(this);
答案 4 :(得分:0)
看这个,
Class<?> c = Class.forName("SecondPage");
Intent newActivity = new Intent(this, c);