Java 如何从“活动”中检测在片段中单击了哪个动态创建的按钮?
我有一个Fragment类,它动态地创建一个按钮网格。然后在显示网格的主活动中创建该片段的实例。这是我的密码: Grid.javaJava 如何从“活动”中检测在片段中单击了哪个动态创建的按钮?,java,android,android-fragments,Java,Android,Android Fragments,我有一个Fragment类,它动态地创建一个按钮网格。然后在显示网格的主活动中创建该片段的实例。这是我的密码: Grid.java public class Grid extends Fragment { LinearLayout myLayout; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
public class Grid extends Fragment {
LinearLayout myLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myLayout = new LinearLayout(getActivity());
LayoutParams lparams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
myLayout.setLayoutParams(lparams);
myLayout.setOrientation(LinearLayout.VERTICAL);
for (int i = 0; i < 4; i++) {
LinearLayout row = new LinearLayout(getActivity());
LayoutParams rowParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
row.setLayoutParams(rowParams);
for (int j = 0; j < 4; j++) {
final Button btnTag = new Button(getActivity());
LayoutParams btnParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
btnTag.setLayoutParams(btnParams);
btnTag.setText(" " + (j + 1 + (i * 4)));
btnTag.setId(j + 1 + (i * 4));
row.addView(btnTag);
}
myLayout.addView(row);
}
return myLayout;
}
}
此外,这里还有我的content_mainactivity.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/content_mainactivity"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.owner.tables.MainActivity"
tools:showIn="@layout/activity_mainactivity">
<FrameLayout
android:layout_width="320dp"
android:layout_height="320dp"
android:id="@+id/grid"
android:layout_centerHorizontal="true">
</FrameLayout>
</RelativeLayout>
所以我的问题是,如何检测活动片段中是否单击了按钮以及单击了哪个按钮?或者,如果我可以在片段中执行此操作,如何将信息传递给活动?使用界面将单击事件传递给活动。在MainActivity中的OnClickListener内调用其方法。
public void doSomethingAtClick() {...}
public class MainActivity extends AppCompatActivity implements MyGridInterface{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_mainactivity);
Grid grid = new Grid();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.grid, grid);
transaction.commit();
}
@Override
public void myAction(<Params..>) {
//Here do whatever you want
}
}
零碎
((MainActivity)getActivity()).doSomethingAtClick()
创建一个接口:
public interface MyGridInterface {
void myAction(<Params...>);
}
在MainActivity中实现侦听器
public void doSomethingAtClick() {...}
public class MainActivity extends AppCompatActivity implements MyGridInterface{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_mainactivity);
Grid grid = new Grid();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.grid, grid);
transaction.commit();
}
@Override
public void myAction(<Params..>) {
//Here do whatever you want
}
}
public类MainActivity扩展AppCompatActivity实现MyGridInterface{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.content\u main活动);
网格=新网格();
FragmentManager=getSupportFragmentManager();
FragmentTransaction=manager.beginTransaction();
事务。添加(R.id.grid,grid);
commit();
}
@凌驾
公共行动{
//你想干什么就干什么
}
}
我对setEleListener有什么疑惑?这是一个需要在片段中实现的方法,还是它已经属于片段对象?此外,片段是否需要一个形式为“MyGridInterface gListener;”的字段?只需将listener设置为MainActivity,就可以侦听片段到活动的事件