내 프로젝트의 구조는 다음입니다 : 활동을 - 조각 - 클래스클래스에서 토스트에 전화하는 방법?
문제를 : 클래스에 따라 몇 가지 조건이 토스트
문제 표시하려면 내가하여 클래스의 컨텍스트를 호출 할 수 없습니다에게 getActivity()
어떻게 최선의 방법으로 해결할 수 있습니까? Public 클래스 또는 변수를 만드시겠습니까?
내 프로젝트의 구조는 다음입니다 : 활동을 - 조각 - 클래스클래스에서 토스트에 전화하는 방법?
문제를 : 클래스에 따라 몇 가지 조건이 토스트
문제 표시하려면 내가하여 클래스의 컨텍스트를 호출 할 수 없습니다에게 getActivity()
어떻게 최선의 방법으로 해결할 수 있습니까? Public 클래스 또는 변수를 만드시겠습니까?
Context
을 클래스 생성자로 보내주십시오. 이처럼 :
private Context context;
public MyClass(Context ctx) {
context = ctx;
}
그리고 건배를 표시하는 데 사용합니다. 다음과 같이
당신은 활동 수업 시간에 토스트를 호출 할 수 있습니다 -
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
은 조각 또는 다른 클래스에 표시하려면 조각의 생성자 또는 특정 클래스의 활동이나 문맥의 참조를 전달해야합니다. 예,
조각 클래스에서Fragment fragment = new Fragment(activity);
-
Class MyFragment extends Fragment{
private Activity mActivity;
MyFragment(Activity activity){
mActivity = activity;
}
void showToast(){
Toast.makeText(mActivity, text, duration);
}
}
Witho
public class Unknown {
public interface UnknownListener {
void displayMessage(CharSequence message);
}
private UnknownListener mUnknownListener;
private final String mToastMessage = "Unknown message";
public Unknown() {}
public void setUnknownListener(UnknownListener listener) {
mUnknownListener = listener;
}
private void doSomething() {
if(mUnknownListener != null) {
mUnknownListener.displayMessage(mToastMessage);
}
}
}
그런 다음에 참조를 확실하게 제거하면서, 당신의 Activity
의 인터페이스를 구현 : 유타 많은 상황, 내가 Activity
가 아닌 다른 클래스에서 Toast
메시지를 트리거 추천 할 수있는 유일한 방법은 Listener
인터페이스를 사용하는 것입니다 해당 라이프 사이클 방법 :
public class MainActivity extends AppCompatActivity implements Unknown.UnknownListener {
private Unknown mUnknown;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUnknown = new Unknown();
mUnknown.setUnknownListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
mUnknown.setUnknownListener(null);
}
@Override
public void displayMessage(CharSequence message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
}
답장을 보내 주셔서 감사합니다. 어쩌면 가장 적절한 해결책 일 수도 있지만, 가장 간단한 방법으로 생성자를 호출하는 것을 선호합니다. 그러나 고맙습니다. – tadvas
귀하의 질문은 매우 모호합니다. [mcve]를 만드는 방법을 검토하는 것이 좋습니다. – Bryan
클래스 (TextWatcher)에서 토스트에 전화해야합니다. 모호한 질문이 아닙니다. – tadvas
링크를 읽었습니까? 나는 당신이 [좋은 질문을하는 법] (http://stackoverflow.com/help/how-to-ask)을 읽어야한다고 생각한다. 문제 해결 방법에 대한 정보를 제공하지 않으며 문제를 재현 할 수있는 코드를 제공하지 않았습니다. * * 애매한 질문이며, 더 많은 정보를 제공하면 도움이 될 것입니다. – Bryan