在 onClickListener 的对话框上下文中输入什么?

What to enter in context of dialog in onClickListener?

我正在尝试通过观看 YouTube 视频来制作单位转换器。问题是他在他的主要 activity 中做所有这些,而我在片段中做所有这些。错误在 java class 片段 UnitConverterFragment.java as

public class UnitConverterFragment extends Fragment {


    TextView convertFromDropdownTextView, convertToDropdownTextView, conversionRateText;
    EditText amountToConvert;
    ArrayList<String> arrayList;
    Dialog fromDialog;
    DialogFragment toDialog;
    Button convertButton;
    String convertFromValue, convertToValue, conversionValue;
    String[] unit = {}; //TODO
    //end


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        return inflater.inflate(R.layout.fragment_unit_converter, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        //start
        convertFromDropdownTextView = view.findViewById(R.id.convert_from_dropdown_menu);
        convertToDropdownTextView = view.findViewById(R.id.convert_to_dropdown_menu);
        convertButton = view.findViewById(R.id.conversionButton);
        conversionRateText = view.findViewById(R.id.conversionRateText);
        amountToConvert = view.findViewById(R.id.amountToConvertValueEditText);

        arrayList = new ArrayList<>();
        for (String i : unit) {
            arrayList.add(i);
        }
        convertFromDropdownTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                fromDialog = new Dialog(UnitConverterFragment.this);
                fromDialog.setContentView(R.layout.from_spinner);
                fromDialog.getWindow().setLayout(650, 800);
                fromDialog.show();

                EditText editText = fromDialog.findViewById(R.id.edit_text);
                ListView listView = fromDialog.findViewById(R.id.list_view);

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(UnitConverterFragment.this, android.R.layout.simple_list_item_1, arrayList);
            }
        });
        //end
    }
}

MainActivity.java是:

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    //start

    //end

    private DrawerLayout drawer;

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

        // start

        // end

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        if (savedInstanceState == null)  {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
            navigationView.setCheckedItem(R.id.nav_home);
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.nav_home:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
                break;
            case R.id.nav_unit_converter:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new UnitConverterFragment()).commit();
                break;
            case R.id.nav_contact:
                Toast.makeText(this, "Contacting...", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_share:
                Toast.makeText(this, "Sharing...", Toast.LENGTH_SHORT).show();
                break;
        }

        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    @Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        }
        super.onBackPressed();
    }

我得到的错误在 UnitConverterFragment.java 最后的 OnClickListener 中。它说它需要上下文。我对此很陌生,所以可能犯了一个大错误。我在看 this youtube video.

首先,您要传递当前上下文 this 这是 Dialog 中的 fragmentContext 本身,但您需要传递父上下文。您可以执行以下操作:

....
...
convertFromDropDownTextView.setOnClickListener(...){
 ...
 fromDialog = new Dialog(requirActivity());
 ....
 //And your ArrayAdapter should be like below:
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, arrayList);
....
}