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