2017-02-26 9 views
-1

がクラッシュし、私は私のbaseactivityからこの方法で私のonItemClick別のアクティビティからメソッドを呼び出すと、

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

を呼び出すようにしようとしているが、それがクラッシュします。これをどうすれば解決できますか?

これは私の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

ベター下線

//オンクリックリスナーを定義するリストの項目 mListView.setOnItemClickListener(onItemClickListener); 今あなたが主な活動でのonClickが定義されていることを、あなたはこのように行う必要はありません。ここで言及する new MainActivity().get()


また、一つのことは、新しいMainActivity(ある)はmainActivityのオブジェクトを作成しますそれからメソッドを呼び出す アクティブではなく、現在は と表示されていますが、それでも私は非常に推奨していない静的メソッドを使用したいと思っています。

+0

少しは分かりません。これを行う方法を教えてもらえますか?申し訳ありません、初心者 – madara09

+0

私の答えを編集しました –

+0

ありがとうございました。 – madara09

0

は時間がかかります。 new MainActivity()の後であなたの活動が構築されるとすぐに、あなたの活動に関連付けられたビューは作成されていません。つまり、NullPointerExceptionです。

これを実行するには、MainActivityにインテントを渡す必要があります。その後、アクティビティのライフサイクルの正しいポイントで、アクティビティの開始インテントに値が存在するかどうかを確認し、必要に応じてアクションを実行することができます。例えば

:あなたは複数のクラスに

更新をベースアクティビティを使用できるように、この項目をクリックリスナーを設定する主な活動のOnCreateメソッドで

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

} 

この方法を試して

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

関連する問題