btn = (Button)findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "点击了按钮", Toast.LENGTH_LONG); }
});
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); } }AndroidMainFest.xml的代码:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.jsonproject" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" > </uses-permission> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.jsonproject.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
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.testhello.MainActivity$PlaceholderFragment" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的按钮" /></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.testhello.MainActivity"
tools:ignore="MergeRootFrame" />
MainActivity.java的代码:package com.example.testhello;import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends ActionBarActivity {
/**
* 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;
}
}
Button btn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener(){ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "点击了按钮", Toast.LENGTH_LONG);
}
});
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);
}
}AndroidMainFest.xml的代码:<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jsonproject"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
</uses-permission> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.jsonproject.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application></manifest>
setContentView(R.layout.activity_main);
btn = (Button)findViewById(R.id.btn);
在onCreate方法中你给ActionBarActivity设置的布局文件是activity_main,而按钮不是在这个布局文件中的,所以这里是拿不到的,还有一点你用了Fragment,这个是在Android3增加的,而你的AndroidManifest.xml文件中的:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
应该是minSdkVersion = “11”,找到问题所在,lz可以自己尝试去修改这种实现,在别的地方去获取这个Button,比如说在Fragment中初始化,但是注意调用顺序,不知道lz能否帮助lz解决问题。
btn = (Button)findViewById(R.id.btn);你改下button的布局试下
大神,一语中的~求指教,我想知道需要了解哪些部分的知识可以让我理解这个调用顺序的问题。问题确实如你所说,我就是不明白配置文件和布局文件以及MainActivity的调用顺序。还有就是怎么样建立项目可以不会继承ActionBarActivity,以前建立项目的时候继承的不是这个类是Activity,也没有两个布局文件。现在有两个是为什么?
大神,一语中的~求指教,我想知道需要了解哪些部分的知识可以让我理解这个调用顺序的问题。问题确实如你所说,我就是不明白配置文件和布局文件以及MainActivity的调用顺序。还有就是怎么样建立项目可以不会继承ActionBarActivity,以前建立项目的时候继承的不是这个类是Activity,也没有两个布局文件。现在有两个是为什么?
这个是最新的ADT修改的地方,之前的版本默认构建的Android项目的Activity是继承Activity的,也没有搞的这么复杂,这块我还没有更新,没有这么做过,比较快的方法时建议lz用最新版之前一个版本的sdk和adt,或者手动修改Activity,希望对你有帮助~
大神,一语中的~求指教,我想知道需要了解哪些部分的知识可以让我理解这个调用顺序的问题。问题确实如你所说,我就是不明白配置文件和布局文件以及MainActivity的调用顺序。还有就是怎么样建立项目可以不会继承ActionBarActivity,以前建立项目的时候继承的不是这个类是Activity,也没有两个布局文件。现在有两个是为什么?
这个是最新的ADT修改的地方,之前的版本默认构建的Android项目的Activity是继承Activity的,也没有搞的这么复杂,这块我还没有更新,没有这么做过,比较快的方法时建议lz用最新版之前一个版本的sdk和adt,或者手动修改Activity,希望对你有帮助~
我还想问一下,你知不知道,在
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {}
这个之后程序还去执行@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();
}
}这段代码吗?
因为组件写在了fragment_main.xml里,所以初始化的时候要写在
setContentView(R.layout.fragment_main);这个后面,而且这些组件的id都是在
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
这个rootView里面的
那我如果我写在setContentView(R.layout.activity_main);
就是对应"activity_main.xml"里的组件该怎么初始化?
不知道我这么问你是否能明白?
话说回来,关于这个帖子,真的非常感谢你给我的启发~~~
所以获取btn的代码要写在
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
下面:
btn = (Button)rootView.findViewById(R.id.btn);不知道lz是否解决了,希望能帮到你。
不过你能告诉我这个的载入顺序吗?
fragment_main.xml和activity_main.xml这两个在MainActivity中的载入顺序。
初始化写在public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() {
}
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
Button btn = (Button)rootView.findViewById(R.id.btn);
TextView tv = (TextView)rootView.findViewById(R.id.tv01);
}View rootView =.......的后面,看这个例子。findViewById前面要加上这个rootView
初始化写在public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() {
}
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
Button btn = (Button)rootView.findViewById(R.id.btn);
TextView tv = (TextView)rootView.findViewById(R.id.tv01);
}View rootView =.......的后面,看这个例子。findViewById前面要加上这个rootView我也是同样的问题,请问楼主是在哪设置按钮监听的。
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
Button bt_dial = (Button)rootView.findViewById(R.id.bt_dial);
bt_dial.setOnClickListener(new MyListener());
EditText st_number=(EditText)rootView.findViewById(R.id.st_number);
return rootView;
}
}findViewById就不报空指针错了
但是没有办法在别的方法调用定义的EditText st_number=(EditText)rootView.findViewById(R.id.st_number);
bt_dial.setOnClickListener(new MyListener());也没有办法调用的别的方法不知道难位大侠可以解决此问题,这个问题困扰了我很久了。
Log.i("-->","2");这样给每个方法标号,然后程序跑一次就知道那个先载入那个后载入了。
} @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;
}
}
把加载的代码写在public static class PlaceholderFragment extends Fragment这个类里面是如何实现点击按钮页面跳转的。。
直接用
Intent intent = new Intent();
ntent.setClass(this, MainActivity2.class);
startActivity(intent);
这种方式是不能跳转的。。
在PlaceHolderFragment这个类中创建静态变量EditText st_number,这样可以在MainActivity中其他位置PlaceHolderFragment.st_number这样引用。