Нужна помощь в оптимизации кода Android Fragment - PullRequest
0 голосов
/ 13 февраля 2012

Есть ли способ уменьшить код?

Как вы можете видеть ниже, я пытаюсь загрузить веб-представление с domain.com/?id=1 и id? = 2 и так далее, и У меня есть много открытых статических классов DEMO *, как я могу его оптимизировать?

public class WebFragment extends FragmentActivity {

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

public static class DEMO1 extends Fragment {

    /** The Fragment's UI **/
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.main, container, false);

        WebView engine = (WebView) v.findViewById(R.id.web_engine);
        engine.loadUrl("http://domain.com/?id=1");
        }
        return v;
    }
}

public static class DEMO2 extends Fragment {

    /** The Fragment's UI **/
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.main, container, false);

        WebView engine = (WebView) v.findViewById(R.id.web_engine);
        engine.loadUrl("http://domain.com/?id=2");
        }
        return v;
    }
}

public static class DEMO3 extends Fragment {

    [... and so on ...]

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Передать URL веб-просмотра в конструкторе ...

public static class Demo extends Fragment {
private String mUrl;
public Demo(String url) {
    this.mUrl = url;
}
/** The Fragment's UI **/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.main, container, false);

    WebView engine = (WebView) v.findViewById(R.id.web_engine);
    engine.loadUrl(mUrl);
    }
    return v;
}
}
0 голосов
/ 13 февраля 2012

Мне нравится решение, которое дается в ApiDemos. Я просто скопирую соответствующие биты n частей:

public static class CountingFragment extends Fragment {
    int mNum;

    /**
     * Create a new instance of CountingFragment, providing "num"
     * as an argument.
     */
    static CountingFragment newInstance(int num) {
        CountingFragment f = new CountingFragment();

        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);

        return f;
    }

    /**
     * When creating, retrieve this instance's number from its arguments.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mNum = getArguments() != null ? getArguments().getInt("num") : 1;
    }

    ...
}

Источник: FragmentStack.java

Вы в основном предоставляете переменную в качестве аргумента при создании экземпляра фрагмента и извлекаете его в onCreate. Тот же код проиллюстрирован в документации по основам фрагментов , которую, возможно, стоит прочитать.

...