Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何检索XML中定义的片段实例?_Android_Android Fragments_Android View - Fatal编程技术网

Android 如何检索XML中定义的片段实例?

Android 如何检索XML中定义的片段实例?,android,android-fragments,android-view,Android,Android Fragments,Android View,简而言之,问题是我可以通过id找到我的元素,但它一直要求我将其转换为视图,而我无法将其转换为对象名的类型。我不确定casting to view是否应该是这样的,但是Android示例只是创建片段并添加它,因此它没有在xml中定义。但问题是,在示例中,对象不是view类型 更多信息: 这可能是一个快速而简单的修复方法。我有一个fragment类,它保存了我用代码创建的自定义视图(这是一个带有常量绘图的游戏)。我在xml布局的左上部分添加了该片段。片段下面是按钮(在xml布局中定义)。我有一个主活

简而言之,问题是我可以通过id找到我的元素,但它一直要求我将其转换为视图,而我无法将其转换为对象名的类型。我不确定casting to view是否应该是这样的,但是Android示例只是创建片段并添加它,因此它没有在xml中定义。但问题是,在示例中,对象不是view类型

更多信息: 这可能是一个快速而简单的修复方法。我有一个fragment类,它保存了我用代码创建的自定义视图(这是一个带有常量绘图的游戏)。我在xml布局的左上部分添加了该片段。片段下面是按钮(在xml布局中定义)。我有一个主活动,我想要一个包含自定义视图的片段实例的句柄,这样当单击按钮时,片段中的一些变量将被更改,视图将被重新绘制

XML:

片段:

public class LEDGridFragment extends Fragment{

    LEDView view;
    TriggerBlueTooth mCallBack;

    boolean[][][] states = new boolean[4][4][4];

    int currentLayer = 0;

    public interface TriggerBlueTooth{
        public void onledSelected(int layer, int led);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        mCallBack = (TriggerBlueTooth) activity;

        view.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int x = (int) (event.getX())/100;
                int y = (int) (event.getY())/100;
                int led = y+(x*4);

                mCallBack.onledSelected(currentLayer, led); //Notify Main Activity of the led that was toggled
                                                            //So it can send data over Bluetooth
                return false;
            }
        });
    }

    public void update(){
        view.drawGrid(states, currentLayer); //Update the view
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        for(int i=0; i<states.length; i++){  //Initialize the board off which the view will be drawn
            for(int j=0; j<states[0].length; j++){
                for(int k=0; k<states[0][0].length; k++){
                    states[i][j][k] = false;
                }
            }
        }

        view = new LEDView(getActivity());
        return view;
        //return super.onCreateView(inflater, container, savedInstanceState); //Auto-formed. Commented out
    }

}
公共类LEDGridFragment扩展了片段{
莱德维尤视图;
触发mCallBack;
布尔[][]状态=新的布尔[4][4][4];
int currentLayer=0;
公共接口触发蓝牙{
仅限公共空间已选择(整数层,整数led);
}
@凌驾
公共事务主任(活动){
超级转速计(活动);
mCallBack=(TriggerBlueTooth)活动;
view.setOnTouchListener(新的OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
intx=(int)(event.getX())/100;
int y=(int)(event.getY())/100;
内部发光二极管=y+(x*4);
mCallBack.onledSelected(currentLayer,led);//通知已切换led的主要活动
//所以它可以通过蓝牙发送数据
返回false;
}
});
}
公共无效更新(){
view.drawGrid(states,currentLayer);//更新视图
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
对于(int i=0;i这应该可以:

FragmentManager mgr = getFragmentManager();
Fragment fragment = mgr.findFragmentById(R.id.lEDView1);

非常感谢。我可以问一下为什么我不能简单地使用findElementById()检索吗?满分虽然
片段
不是
视图
,所以找不到它。但是,您可以搜索
片段
包含的
视图
,这样会成功。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}


}
public class LEDGridFragment extends Fragment{

    LEDView view;
    TriggerBlueTooth mCallBack;

    boolean[][][] states = new boolean[4][4][4];

    int currentLayer = 0;

    public interface TriggerBlueTooth{
        public void onledSelected(int layer, int led);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        mCallBack = (TriggerBlueTooth) activity;

        view.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int x = (int) (event.getX())/100;
                int y = (int) (event.getY())/100;
                int led = y+(x*4);

                mCallBack.onledSelected(currentLayer, led); //Notify Main Activity of the led that was toggled
                                                            //So it can send data over Bluetooth
                return false;
            }
        });
    }

    public void update(){
        view.drawGrid(states, currentLayer); //Update the view
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        for(int i=0; i<states.length; i++){  //Initialize the board off which the view will be drawn
            for(int j=0; j<states[0].length; j++){
                for(int k=0; k<states[0][0].length; k++){
                    states[i][j][k] = false;
                }
            }
        }

        view = new LEDView(getActivity());
        return view;
        //return super.onCreateView(inflater, container, savedInstanceState); //Auto-formed. Commented out
    }

}
FragmentManager mgr = getFragmentManager();
Fragment fragment = mgr.findFragmentById(R.id.lEDView1);