2016-12-28 58 views
-4

我正在使用android studio 2.2.2從Android Tutorial for Beginners 8 # wrap_content, fill_parent, Password Field and Toast in Android 學習android。無法解析getActivity()和getApplicationContext()

我已經做了相同的教程中提到,但無法理解爲什麼getApplicationContext()和getActivity方法不可解析。

我試過getActivity(),getActivity()。getApplicationContext(),MainActivity.this ....等等。但Toast.makeText方法無法識別上下文。

任何人都可以告訴我什麼是確切的問題?我該如何解決它?

下面是我的代碼:

package com.example.programingknowledge.myfirstapp; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 


public class MainActivity extends AppCompatActivity { 

private EditText pass_word; 
private Button btn_sbm; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    addListenerOnButton(); 

} 

public void addListenerOnButton() { 
    pass_word = (EditText) findViewById(R.id.editText); 
    btn_sbm = (Button) findViewById(R.id.button); 
    final CharSequence passText = pass_word.getText().toString(); 


    btn_sbm.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(getApplicationContext(), passText, Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
} 

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.programingknowledge.myfirstapp"> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.programingknowledge.myfirstapp.MainActivity" 
android:background="@android:color/black"> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textPassword" 
    android:ems="10" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:id="@+id/editText" /> 

<Button 
    android:text="Button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="23dp" 
    android:id="@+id/button" 
    android:layout_below="@+id/editText" 
    android:layout_centerHorizontal="true" /> 
</RelativeLayout> 
+0

包名是哪裏? – Umer

+1

getActivity()將在片段中工作 – Redman

+0

'getActivity()'對於Activity沒有意義。它已經是一個活動。對於getApplicationContext(),最好使用Activity Context:this。 –

回答

0

的In y我們的情況是,你試圖從回調中表示敬酒。你應該通過MainActivity.this作爲makeToast方法方面:

Toast.makeText(MainActivity.this, passText, Toast.LENGTH_SHORT).show(); 
3

只要改變getApplicationContext()或的getContext()來YourActivity.this

例如

Toast.makeText(MainActivity.this, passText, Toast.LENGTH_SHORT).show(); 

請不存儲上下文作爲一個領域。您可以從任何角度進入,無需存儲。

+0

如果我使用MainActivity.this,那麼它顯示「無法解析方法makeText(com.example.programingknowledge.myfirstapp.MainActiity,java.lang.CharSequence,int)」 – mrugeshthaker

+0

它因爲你的passText是CharSequence,使用passText.toString () –

+0

感謝您的幫助。當我試圖查看makeText方法的源代碼時,在那個Android工作室要求我更新android-25的源代碼。我已經下載並更新了相同的內容。重新啓動工作室後,它正在工作。我不明白這個問題,但現在解決了。它看起來像我的應用程序的build.gradle文件是compileSdkVersion 25,但我沒有下載它。 – mrugeshthaker

0
btn_sbm.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Toast.makeText(getApplicationContext(), passText, Toast.LENGTH_SHORT).show(); 
    } 
}); 

試試這個

0
Toast.makeText(MainActivity.this, passText, Toast.LENGTH_SHORT).show(); 

以上應該工作。如果沒有,發佈你的Logcat進行崩潰。

0

當你在活動,這意味着你有上下文即活動。你可以通過調用這個MainActivity.this來實現。因爲您在OnClickListener對象內使用Toast,所以此將無法​​在此處工作,因爲此處表示它將採用OnClickLister作爲其對象。所以在這裏你必須使用你的班級,即MainActivity.this。 在片段的情況下,您可以通過調用getActivity()來實現上下文,因爲Fragment必須至少有一個Activity,它是Context。 而getApplicationContext()意味着您的整個應用程序上下文。

btn_sbm.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Toast.makeText(MainActivity.this, passText, Toast.LENGTH_SHORT).show(); 
    } 
}); 
0

請發佈您的AndroidManifest.xmlactivity_main.xml文件。

Upd。:問題是,在你的應用程序的build.gradle文件是compileSdkVersion 25,但你不下載它。你也應該總是根據你的targetSdkversion下載android-sdk源代碼。所以,只要保持你的Android Studio文件最新,那麼問題就會消失。

+0

我看不到有什麼問題。試試這個: FILE - >無效緩存/重啓 和生成 - >重建項目。 – Hetfieldan24

+0

當我試圖查看makeText方法的源代碼時,Android Studio要求我更新android-25的源代碼。我已經下載並更新了相同的內容。重新啓動studio後,它開始工作。我不明白這個問題,但現在解決了。 – mrugeshthaker

+1

它看起來像在你的應用程序的build.gradle文件中是compileSdkVersion 25,但你不會下載它。所以,只要保持你的Android Studio文件最新,那麼問題就會消失。 – Hetfieldan24

相關問題