我创建了一个项目的Android工作室默认的活动为抽屉式导航活动如何指定搜索OnClick方法,当onClick事件上
然后片段出现创建了两个名为Myfragment1和Myfragment2的新片段。
然后实现的方法基于从导航抽屉选择的选项上调用适当的片段,我使用LayoutInflater膨胀方法加载这些片段,对于相同的代码已被放置在MainActivity类的方法onCreateView。
当Myfragment1片段被加载,如果我点击添加按钮这是对Myfragment1则给出了错误“java.lang.IllegalStateException:无法找到一个方法”。
我创建按钮的听众在Myfragment1.java的onCreateView文件
我指定它应该在DatabaseActivity类搜索邻n点击的方法,但它仍然给错误
MainActivity.java
public class MainActivity extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks {
private NavigationDrawerFragment mNavigationDrawerFragment;
private CharSequence mTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView;
switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1:
rootView = inflater.inflate(R.layout.fragment_myfragment1, container, false);
break;
case 2:
rootView = inflater.inflate(R.layout.fragment_myfragment2, container, false);
break;
default:
rootView = inflater.inflate(R.layout.fragment_myfragment1, container, false);
}
return rootView;
}
}
Myfragment1.java
public class Myfragment1 extends Fragment implements View.OnClickListener
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_myfragment1, container, false);
Button add = (Button) view .findViewById(R.id.button_add);
add.setOnClickListener(this);
return view ;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_add:
DatabaseActivity d= new DatabaseActivity();
d.newProduct(v);
break;
}
}
}
DatabaseActivity类
public class DatabaseActivity extends ActionBarActivity
{
EditText productBox;
EditText quantityBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
productBox = (EditText) findViewById(R.id.productBox);
quantityBox = (EditText) findViewById(R.id.quantityBox);
}
public void newProduct (View view) {
MyDBHandler dbHandler = new MyDBHandler(this, null, null, 1);
int quantity = Integer.parseInt(quantityBox.getText().toString());
Product product = new Product(productBox.getText().toString(), quantity);
dbHandler.addProduct(product);
productBox.setText("");
quantityBox.setText("");
}
}
Myfragment1.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.test.masterflow1.Myfragment1">
<!-- TODO: Update blank fragment layout -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/delete_string"
android:id="@+id/button_remove"
android:onClick="removeProduct"
android:layout_gravity="right|bottom" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/find_string"
android:id="@+id/button_find"
android:onClick="lookupProduct"
android:layout_gravity="left|bottom" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add_string"
android:id="@+id/button_add"
android:onClick="newProduct"
android:layout_gravity="center_horizontal|bottom" />
<EditText
android:layout_width="263dp"
android:layout_height="wrap_content"
android:id="@+id/productBox"
android:layout_below="@+id/productID_Box"
android:layout_alignParentEnd="true"
android:layout_marginTop="72dp"
android:layout_alignStart="@+id/productID_Box"
android:layout_gravity="right|top" />
<EditText
android:layout_width="51dp"
android:layout_height="76dp"
android:id="@+id/quantityBox"
android:layout_centerVertical="true"
android:layout_alignEnd="@+id/button3"
android:layout_toEndOf="@+id/button2"
android:layout_gravity="right|center_vertical" />
<TextView
android:layout_width="64dp"
android:layout_height="59dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/productID_Box"
android:layout_alignWithParentIfMissing="false"
android:layout_alignParentEnd="true"
android:layout_alignStart="@+id/quantityBox"
android:layout_gravity="right|top" />
logcat的
22733-22733/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not find a method newProduct(View) in the activity class com.test.masterflow1.MainActivity for onClick handler on view class android.support.v7.internal.widget.TintButton with id 'button_add'
at android.view.View$1.onClick(View.java:3791)
at android.view.View.performClick(View.java:4439)
at android.widget.Button.performClick(Button.java:139)
at android.view.View$PerformClick.run(View.java:18395)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5317)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoSuchMethodException: newProduct [class android.view.View]
at java.lang.Class.getConstructorOrMethod(Class.java:460)
at java.lang.Class.getMethod(Class.java:915)
at android.view.View$1.onClick(View.java:3784)
at android.view.View.performClick(View.java:4439)
at android.widget.Button.performClick(Button.java:139)
at android.view.View$PerformClick.run(View.java:18395)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5317)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
你能否提供一些参考资料,因为我是初学者,通过阅读各种教程进行学习。不知道如何做到这一点 –
可能这将有助于http://examples.javacodegeeks.com/android/core/view/onclicklistener/android-onclicklistener-example/ –
@adityaNaik我已经尝试过,就像说那里一样通过重写onclick方法,但它不工作 –