1

我將我的活動上下文從我的主活動傳遞給OnClickListener,而OnClickListener又將該上下文(或者我會想到的)傳遞給對話框建設者。 onClickListener可以調用活動方法,但對話框構建器不能使用getActivity()。實現彈出式表格可能有更好的方法,但我是一個初學者,使用GUI和麪向對象編程。代碼如下。當上下文傳遞給一個非活動方法的字符串時,無法訪問活動上下文

public class MainActivity extends AppCompatActivity { 

    private MyClickListener myClickListener; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myClickListener = new MyClickListener(this); 

     TextView textView = (TextView)findViewById(R.id.clicked_text_view); 
     textView.setOnClickListener(myClickListener); 
    } 
} 


public class MyClickListener implements View.OnClickListener { 

    private MyDialogBuilder dialogBuilder; 
    private AlertDialog dialog; 
    private Context context; 

    public MyClickListener(Context context) { 
     this.context = context; 
    } 

    @Override 
    public void onClick(View view) { 
     //do some stuff and pass some stuff to dialog builder 
     //create a dialog 
     dialogBuilder = new MyDialogBuilder(context); 
     dialog = dialogBuilder.buildDialog(); 
     dialog.show(); 
    } 
} 


    public class MyDialogBuilder { 
    Context context; 
    AlertDialog dialog; 

    public MyDialogBuilder(Context context){ 
     this.context = context; 
    } 

    public AlertDialog buildDialog(){ 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 

     // inflate a layout and pass it to the dialog builder 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     builder.setView(inflater.inflate(R.layout.popup_dialog, null)); 

     builder.setMessage(R.string.dialog_message) 
           .setTitle("pop up title"); 
     dialog = builder.create(); 

     return dialog; 
    } 
} 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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:orientation="vertical" 
    tools:context="com.example.applicationwithpopup.MainActivity"> 

    <TextView android:id="@+id/clicked_text_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:textSize="72dp" 
     android:layout_gravity="center" 
     android:text="click me"/> 
</LinearLayout> 



<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<TextView 
    android:id="@+id/dialog_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="dialog layout" 
    android:textSize="@dimen/text_size" /> 
</LinearLayout> 

回答

0

您需要活動

private void createDialog(Context context) { 
    // Create our dialog here 
    private MyDialogBuilder dialogBuilder; 
    private AlertDialog dialog; 

    dialogBuilder = new MyDialogBuilder(context); 
    dialog = dialogBuilder.buildDialog(); 
    dialog.show(); 
} 

創建你自己的方法,比你的監聽器調用此方法:

public class MyClickListener implements View.OnClickListener { 
    @Override 
    public void onClick(View view) { 
     createDialog(getContext); 
    } 
} 
相關問題