技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 移动开发 > android > 正文

关于更新sdk和adt到22.6后新建项目中layout文件夹下有activity_main.xml和fragment_main.xml的问题

来源: 技术CTO 阅读:

我知道Fragment代表了Activity的子模块,在fragment_main.xml中部署UI组件,在MainActivity.java中怎么对fragment_main.xml中的组件进行操作呢?
MainActivity.java自动生成的代码如下:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}

@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;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}

}
fragment_main.xml的代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/my"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</LinearLayout>
对fragment_main.xml中的TextView,在MainActivity.java中怎么写,直接写在protected void onCreate(Bundle savedInstanceState) 中运行会自动停止,难道要自己写个FragmentActivity.java文件对fragment_main.xml进行操作?跪求大神解答!!!!

新版安装SDK文件一开始有两个XML文件,activity_main.xml和fragment_main.xml,
不习惯的可以这样处理:
1.删除fragment_main.xml整个文件
2.对activity_main.xml,删除里面的内容。然后切换到Graphy Layout,放入一个LinearLayout就可以
3.对MainActivity.java,可以删除下面红色标注的内容,再把MainActivity extends ActionBarActivity 改为MainActivity extends Activity :

package com.zmcorp.weightcalculator;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

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

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}

@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;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}

}


还有一种最完全的改造方法就是:把两个XML文件都删除掉,还有默认的JAVA文件也删除掉,自己重新写,当然这种方法不适合初学者。
新版安装SDK文件一开始有两个XML文件,activity_main.xml和fragment_main.xml,
不习惯的可以这样处理:
1.删除fragment_main.xml整个文件
2.对activity_main.xml,删除里面的内容。然后切换到Graphy Layout,放入一个LinearLayout就可以
3.对MainActivity.java,可以删除部分的内容,再把MainActivity extends ActionBarActivity 改为MainActivity extends Activity :
改后如下:
package com.zmcorp.weightcalculator;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

MainActivity extends Activity {

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


}

@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;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}


}

}


还有一种最完全的改造方法就是:把两个XML文件都删除掉,还有默认的JAVA文件也删除掉,自己重新写,当然这种方法不适合初学者。
我也遇到了同样的问题,如果删除XML文件,重写文件的话,那出这个新版有啥意思呢?是不是新版本里应该提供了取出fragment_main.xml中控件的id的方法
当然有方法了,新版是在PlaceholderFragment类里获取fragment_main.xml中的控件

View rootView = inflater.inflate(R.layout.fragment_main,container, false);
//获取Next按钮
Button btn_Next = (Button) rootView.findViewById(R.id.btn_change_degree);
这些都是默认生成的 你要是初学 装回低版本的adt好点 没必要纠结这些
引用 4 楼 xzpnuist 的回复:
当然有方法了,新版是在PlaceholderFragment类里获取fragment_main.xml中的控件

View rootView = inflater.inflate(R.layout.fragment_main,container, false);
//获取Next按钮
Button btn_Next = (Button) rootView.findViewById(R.id.btn_change_degree);


\

在PlaceholderFragment类里面调用非静态函数怎么解??

新人初学android,恳求详解
我都是都是直接在fragment_main.xml上编写代码的,activity_main.xml文件没有去管它 然后再MainActivity.java文件中,将“setContentView(R.layout.activity_main);”改成“setContentView(R.layout.fragment_main);”然后再屏蔽掉后面的
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}

这样就不会闪退了,小白也不知道什么原因,可能还要按照上面大神说的吧,不过这样好用的,不会闪退
有没有直接解决的办法啊 我也是这个问题 烦死啦
引用 1 楼 leansmall 的回复:
新版安装SDK文件一开始有两个XML文件,activity_main.xml和fragment_main.xml,
不习惯的可以这样处理:
1.删除fragment_main.xml整个文件
2.对activity_main.xml,删除里面的内容。然后切换到Graphy Layout,放入一个LinearLayout就可以
3.对MainActivity.java,可以删除下面红色标注的内容,再把MainActivity extends ActionBarActivity 改为MainActivity extends Activity :


但是  public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}
仍然有错误啊
引用 6 楼 u012784457 的回复:
Quote: 引用 4 楼 xzpnuist 的回复:

当然有方法了,新版是在PlaceholderFragment类里获取fragment_main.xml中的控件

View rootView = inflater.inflate(R.layout.fragment_main,container, false);
//获取Next按钮
Button btn_Next = (Button) rootView.findViewById(R.id.btn_change_degree);


\

在PlaceholderFragment类里面调用非静态函数怎么解??

新人初学android,恳求详解


可以这样解决:Intent intent = getActivity().getIntent();
最好的解决办法就是 

打开fragment_main.xml   Ctrl+A,  接着 Ctrl+C,
打开activity_main.xml   Ctrl+A,  接着 Ctrl+V,

MainActivity 中  只保留下面的代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}   
后面的全部不要了


呼呼
在MainActivity类的内部静态类PlaceholderFragment 类中的onCreateView方法中获取fragment_main.xml中控件

public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
Button btnFirstButton = (Button) rootView.findViewById(R.id.btn_firstButton);
btnFirstButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getActivity(), "rootView.findViewById|fragment_main|getActivity| - -#", Toast.LENGTH_LONG).show();
}
});
return rootView;
}
}
楼主解决没,有什么好方法可以直接获取的?

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^