I'm trying to call this method
public void get() {
tileView.smoothScaleFromCenter( 0.5000f );
}
in my onItemClick
from my baseactivity, but it crashes. How can I fix this?
This is my baseactivity:
public boolean onQueryTextChange(String newText) {
showResults(newText + "*");
return false;
}
public boolean onQueryTextSubmit(String query) {
showResults(query + "*");
return false;
}
public boolean onClose() {
searchView.onActionViewCollapsed();
showResults("");
return false;
}
private void showResults(String query) {
Cursor cursor = mDbHelper.searchPlaces((query != null ? query.toString() : "@@@@"));
if (cursor == null) {
//
} else {
// Specify the columns we want to display in the result
String[] from = new String[]{
PlacesDbAdapter.KEY_PLACES
};
// Specify the Corresponding layout elements where we want the columns to go
int[] to = new int[]{R.id.scustomer
};
// Create a simple cursor adapter for the definitions and apply them to the ListView
SimpleCursorAdapter places1 = new SimpleCursorAdapter(this, R.layout.customerresult, cursor, from, to);
mListView.setAdapter(places1);
// Define the on-click listener for the list items
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
new MainActivity().get();
searchView.setQuery("", true);
}
});
}
}
This my mainactivity:
public void get() {
tileView.smoothScaleFromCenter( 0.5000f );
}}
Here is my logcat:
02-26 16:12:21.074 31567-31567/com.example.lightning.myapplication3 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.lightning.myapplication3, PID: 31567
java.lang.NullPointerException
at com.example.lightning.myapplication3.MainActivity.get(MainActivity.java:208)
at com.example.lightning.myapplication3.BaseActivity$3.onItemClick(BaseActivity.java:197)
at android.widget.AdapterView.performItemClick(AdapterView.java:299)
at android.widget.AbsListView.performItemClick(AbsListView.java:1156)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2963)
at android.widget.AbsListView$3.run(AbsListView.java:3737)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5421)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:979)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
at dalvik.system.NativeStart.main(Native Method)
Better to try this way
public class BaseActivity{
// ... fields....
//Define ClickListner on base class or just a setter
OnItemClickListener onItemClickListener;
//.... methods ...
private void showResults(String query) {
// ... lines....
\*mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
new MainActivity().get();
searchView.setQuery("", true);
}
});*/
//replace above with this
if(onItemClickListener!=null)
mListView.setOnItemClickListener(onItemClickListener);
}
//generate setter for that
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
this.onItemClickListener = onItemClickListener;
mListView.setOnItemClickListener(onItemClickListener);
}
}
public class MainActivity extends BaseActivity implements OnItemClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentview...
setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
get();
searchView.setQuery("", true);
}
}
in main activity oncreate method set this item click listener so you can use base activity in multiple classes
update below line
// Define the on-click listener for the list items
mListView.setOnItemClickListener(onItemClickListener);
now that you have defined the onClick in main activity you do not need to do like this:
new MainActivity().get()
Also one thing to mention here is new MainActivity() creates the object of mainActivity and calls get method from it rather then activty which has been viewed currently if still you do want to call use static method which i highly do not recommend to do so.