2017-02-26 55 views
-1

我试图调用此方法从另一个活动调用方法崩溃

public void get() { 
    tileView.smoothScaleFromCenter(0.5000f); 
} 

onItemClick从我baseactivity,但它崩溃。我怎样才能解决这个问题?

这是我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); 
      } 
     }); 
    } 
} 

这是我mainactivity:

public void get() { 
tileView.smoothScaleFromCenter(0.5000f); 
}} 

这里是我的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) 

回答

0
更好

尝试这种方式

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); 
    } 

} 
在主要活动onCreate方法

设定该项点击监听,所以你可以在多个类

更新使用基本活动在线下

//定义点击式侦听器列表中的项目现在你已经定义的onClick在主要活动中,你不需要做这样的 mListView.setOnItemClickListener(onItemClickListener); new MainActivity().get()


而且这里有一点要提的是新的MainActivity()创建mainActivity的对象并呼吁从它得到的方法 ,而不是活动目前已被查看 如果你仍然想打电话使用静态方法,我高度不建议这样做。

+0

我不明白一点。你能告诉我如何做到这一点。?对不起我即将新手 – madara09

+0

编辑我的答案,看看 –

+0

非常感谢。 – madara09

0

创建活动需要一定的时间。只要您的活动在new MainActivity()之后构建,与您的活动相关的视图尚未创建或绑定...因此NullPointerException

为了实现这个目标,您应该将意图传递给MainActivity。然后,在活动生命周期中的正确位置,可以检查活动的开始意图中是否存在值,然后在需要时执行该操作。

例如:

public static final String KEY_SCALE_FROM_CENTER = "scale_from_center"; 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    searchView.setQuery("", true); 
    Intent intent = new Intent(this, MainActivity.class); 
    intent.putExtra(KEY_SCALE_FROM_CENTER, true); 
    startActivity(intent); 
} 


public class MainActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_view); 
     if (getIntent().getBooleanExtra(KEY_SCALE_FROM_CENTER, false)) { 
      get(); 
     } 
    } 
} 
+0

你说的“putBoolean”不起作用,即时获取putExtra。 – madara09