用于微调器的Android适配器(在片段中传递上下文)

时间:2016-03-26 22:39:55

标签: java android android-fragments android-spinner android-context

我找不到在静态片段(onCreateView()函数)中将上下文传递给适配器for spinner的方法:

public class MainActivity extends AppCompatActivity{
.
.
.

    public static class MainFragment extends Fragment {
    .
    .
    .

        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       .
       .
       .
        spinner1.setAdapter(new MyAdapter(MainActivity.this, spinner1, spinnerValues));
        spinner2.setAdapter(new MyAdapter(this, spinner1, spinnerValues));
        spinner3.setAdapter(new MyAdapter(this, spinner1, spinnerValues));
   .
   .
   .

我甚至尝试创建静态类,它使用静态方法返回上下文,但两种方法都不起作用。

那是MyAdapter类:

public class MyAdapter extends ArrayAdapter<String> {

    public MyAdapter(Context ctx, int txtViewResourceId, String[] objects) {
        super(ctx, txtViewResourceId, objects);
    }

    public View getDropDownView(int position, View cnvtView, ViewGroup prnt) {
        return getCustomView(position, cnvtView, prnt);
    }
    public View getView(int pos, View cnvtView, ViewGroup prnt) {
        return getCustomView(pos, cnvtView, prnt);
    }
    public View getCustomView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = getLayoutInflater();
        View mySpinner = inflater.inflate(R.layout.custom_spinner, parent, false);
        TextView main_text = (TextView) mySpinner
                .findViewById(R.id.text_main_seen);
        main_text.setText(spinnerValues[position]);
        return mySpinner;
    }
}

编辑:我收到一条错误:“MainActivity.this无法从静态上下文中引用”

1 个答案:

答案 0 :(得分:1)

您可以传递getActivity()yourParentView.getContext()

<强>上下文 顾名思义,它是应用程序/对象当前状态的上下文。它允许新创建的对象了解正在发生的事情。通常,您可以调用它来获取有关程序其他部分(活动,包/应用程序)的信息

<强>活动 Activity是支持屏幕或UI的Java代码。换句话说,用户界面的构建块是活动。 Activity类是Android中的预定义类,每个具有UI的应用程序都必须继承它以创建窗口。 Activity表示Android应用程序的表示层,例如,用户看到的屏幕。 Android应用程序可以有多个活动,并且可以在应用程序运行时在它们之间切换。

注意:Activity扩展了Context。上下文不是活动。