android工程中的activity_main fragment_main.xml是如何关联的

画个问号给明天 2014-03-16 11:18:57
我用的是sdk4.X
创建工程后发现layout下不止有一个配置文件:activity_main fragment_main.xml,我想要添加按钮盒文本框,但是在fragment.xml
下添加后,在MainActivity.java中添加了相应的代码,后发现还是没显示出来,应该是需要在activity_main.xml中导入fragment_main.xml吧,查了半天没查到,MainActivity.java:
package com.example.ee;

import android.app.Activity;
import android.app.ActionBar;
import android.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.widget.Button;
import android.widget.TextView;
import android.os.Build;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView myTextview = (TextView)findViewById(R.id.myTextview);
Button myButton = (Button)findViewById(R.id.myButton);
myTextview.setText("我的第一个TextView");
myButton.setText("我的第一个Button");
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:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.ee.MainActivity$PlaceholderFragment" >

<TextView
android:id="@+id/myTextview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/myButton"
android:layout_width="fill_parent"
android:layout_height ="wrap_content"/>

</RelativeLayout>

activity_main.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.ee.MainActivity"
tools:ignore="MergeRootFrame">
<fragment
android:id="@+id/fragement_main"
android:name="net.loonggg.fragment.FragmentMain"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="10" />

</FrameLayout>
大家帮我看看我错在哪儿或者遗漏了什么,谢谢了!
...全文
9780 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fourwanzi 2014-07-11
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_3e28c8a50101fqvw.html,5楼大大的新浪微博解决了这个问题~找到链接了~
fourwanzi 2014-07-11
  • 打赏
  • 举报
回复
16楼5楼博客里文章好多,是哪一篇解决这个文体呀~能不能上个链接~多谢
派乐 2014-07-11
  • 打赏
  • 举报
回复
是不是你的string.xml中没有对应的<string name=""></string>
sun9moon 2014-06-27
  • 打赏
  • 举报
回复
我建议按11楼的方法,把 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { /*下的这段代码 TextView myTextview = (TextView)findViewById(R.id.myTextview); //这里是找不到的 Button myButton = (Button)findViewById(R.id.myButton); //这里是找不到的 myTextview.setText("我的第一个TextView"); myButton.setText("我的第一个Button"); */ //去掉,然后在最后面的函数中添加实现 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); //在这里添加实现楼主的想法 TextView myTextview = (TextView)rootView.findViewById(R.id.myTextview); Button myButton = (Button)rootView.findViewById(R.id.myButton); //这样就能找到了 myTextview.setText("我的第一个TextView"); //这样就能生效了 myButton.setText("我的第一个Button") //添加完毕 return rootView; } 对应方法,View rootView = inflater.inflate(R.layout.fragment_main, container,false); 然后通过rootView 来查找findViewById(R.id.myTextview);
kamewitch 2014-05-14
  • 打赏
  • 举报
回复
这是5楼的博客里提到的
kamewitch 2014-05-14
  • 打赏
  • 举报
回复
5楼的红色部分是这些 import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; ################################################## if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } ########################################### 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; } }
xieaisheng 2014-05-07
  • 打赏
  • 举报
回复
5楼红色的在哪里呢?,急盼!
五的二次方 2014-05-05
  • 打赏
  • 举报
回复
谁能告诉我那两个在activity中怎么关联的?
付笑天 2014-04-22
  • 打赏
  • 举报
回复
在MainActivity类的内部静态类PlaceholderFragment 类中的onCreateView方法中获取fragment_main.xml中控件

	/**
	 * 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);
			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 - -#", Toast.LENGTH_LONG).show();
				}
			});
			return rootView;
		}
	}
xiaofengcanyue341 2014-04-15
  • 打赏
  • 举报
回复
myTextview,myButton是在fragment_main.xml中的,在没引进fragment_main.xml之前,你是通过findViewById找不到的。。 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); TextView myTextview = (TextView)rootView.findViewById(R.id.myTextview); Button myButton = (Button)rootView.findViewById(R.id.myButton); myTextview.setText("我的第一个TextView"); myButton.setText("我的第一个Button") return rootView; } }
八角茴 2014-04-14
  • 打赏
  • 举报
回复
我也是这个问题 楼主解决了没?
Android小怪 2014-04-10
  • 打赏
  • 举报
回复
请问楼主解决了吗,我也遇到这个问题了,困扰好多天了
我鲁班无敌 2014-04-10
  • 打赏
  • 举报
回复
5楼 红色在哪?
  • 打赏
  • 举报
回复
5楼说的方法,可以,但是如果不用之前的方式,而是采用这种frame,如何修改呐?
Android小怪 2014-04-08
  • 打赏
  • 举报
回复
可以具体点吗
  • 打赏
  • 举报
回复
新版安装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文件也删除掉,自己重新写,当然这种方法不适合初学者。
  • 打赏
  • 举报
回复
引用 1 楼 cclovescw 的回复:
fragment.xml是按钮盒文本框的样式吗?那写个自定义的控件,控件setContentView(R.layout.fragment)
我现在想知道Activity_main.xml,fragment_main.xml 中怎么写才可以加上按钮和文本控件
babysgaler 2014-03-19
  • 打赏
  • 举报
回复
只要在fragment_main.xml中加入按钮布局代码就可以显示了。
  • 打赏
  • 举报
回复
引用 3 楼 babysgaler 的回复:
只要在fragment_main.xml中加入按钮布局代码就可以显示了。
我上面已经加进去了,不能显示,后来又在Activity_main.xml中加入了<fragment />
  • 打赏
  • 举报
回复
fragment.xml是按钮盒文本框的样式吗?那写个自定义的控件,控件setContentView(R.layout.fragment)

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧