- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有带 viewpager 的应用程序。当我单击第一个 fragment 上的按钮时,我需要调用其他 fragment 方法。
这是我的邮件 Activity
view plainprint?
Note: Text content in the code blocks is automatically word-wrapped
package src.com.programmingmobile.pageviewer;
package src.com.programmingmobile.pageviewer;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.widget.Toast;
public class PageViewActivity extends FragmentActivity implements Communicator{
MyPageAdapter pageAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
try{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page_view);
List<Fragment> fragments = getFragments();
pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager)findViewById(R.id.viewpager);
pager.setAdapter(pageAdapter);
}catch(Exception e){
e.printStackTrace();
}
}
private List<Fragment> getFragments(){
List<Fragment> fList = new ArrayList<Fragment>();
fList.add(MyFragment.newInstance("Fragment 1"));
fList.add(MyFragment2.newInstance("Fragment 2"));
//fList.add(MyFragment.newInstance("Fragment 3"));
return fList;
}
private class MyPageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
@Override
public void respond(String data) {
// TODO Auto-generated method stub
MyFragment2 fragment = (MyFragment2) getSupportFragmentManager().findFragmentById(R.id.Fragment2);
fragment.print();
}
}
这是我的 fragment 1
view plainprint?
Note: Text content in the code blocks is automatically word-wrapped
package src.com.programmingmobile.pageviewer;
import java.io.InputStream;
import javax.net.ssl.ManagerFactoryParameters;
import com.epapyrus.plugpdf.SimpleDocumentReader;
import com.epapyrus.plugpdf.SimpleDocumentReaderListener;
import com.epapyrus.plugpdf.SimpleReaderFactory;
import com.epapyrus.plugpdf.core.viewer.DocumentState;
import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MyFragment extends Fragment{
public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";
Communicator com;
public void onAttach(Activity a) {
super.onAttach(a);
com = (Communicator) a;
}
public static final MyFragment newInstance(String message) {
MyFragment f = new MyFragment();
Bundle bdl = new Bundle(1);
bdl.putString(EXTRA_MESSAGE, message);
f.setArguments(bdl);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String message = getArguments().getString(EXTRA_MESSAGE);
View v = inflater.inflate(R.layout.myfragment_layout, container, false);
TextView messageTextView = (TextView) v.findViewById(R.id.textView);
messageTextView.setText(message);
// OpenPdf();
LinearLayout mLinearLayout = (LinearLayout) inflater.inflate(
R.layout.myfragment_layout, container, false);
// note that we're looking for a button with id="@+id/myButton" in your
// inflated layout
// Naturally, this can be any View; it doesn't have to be a button
Button mButton = (Button) mLinearLayout.findViewById(R.id.button1);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
com.respond("Fragment ");
}
});
return mLinearLayout;
}
}
这是 fragment 2
view plainprint?
Note: Text content in the code blocks is automatically word-wrapped
package src.com.programmingmobile.pageviewer;
import java.io.InputStream;
import com.epapyrus.plugpdf.SimpleDocumentReader;
import com.epapyrus.plugpdf.SimpleDocumentReaderListener;
import com.epapyrus.plugpdf.SimpleReaderFactory;
import com.epapyrus.plugpdf.core.viewer.DocumentState;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MyFragment2 extends Fragment {
public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";
// create a listener for receiving provide pdf loading results
SimpleDocumentReaderListener m_listener = new SimpleDocumentReaderListener() {
@Override
public void onLoadFinish(DocumentState.OPEN state) {
}
};
public static final MyFragment2 newInstance(String message) {
MyFragment2 f = new MyFragment2();
Bundle bdl = new Bundle(1);
bdl.putString(EXTRA_MESSAGE, message);
f.setArguments(bdl);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String message = getArguments().getString(EXTRA_MESSAGE);
View v = inflater.inflate(R.layout.myfragment_layout2, container, false);
TextView messageTextView = (TextView) v.findViewById(R.id.textView);
messageTextView.setText(message);
//OpenPdf();
return v;
}
public void print(){
Toast.makeText(getActivity(), " inside Respond ", 100);
}
}
这是 myfragment_layout xml 文件
view plainprint?
Note: Text content in the code blocks is automatically word-wrapped
package src.com.programmingmobile.pageviewer;
import java.io.InputStream;
import javax.net.ssl.ManagerFactoryParameters;
import com.epapyrus.plugpdf.SimpleDocumentReader;
import com.epapyrus.plugpdf.SimpleDocumentReaderListener;
import com.epapyrus.plugpdf.SimpleReaderFactory;
import com.epapyrus.plugpdf.core.viewer.DocumentState;
import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MyFragment extends Fragment {
public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";
Communicator com;
public void onAttach(Activity a) {
super.onAttach(a);
com = (Communicator) com;
}
public static final MyFragment newInstance(String message) {
MyFragment f = new MyFragment();
Bundle bdl = new Bundle(1);
bdl.putString(EXTRA_MESSAGE, message);
f.setArguments(bdl);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String message = getArguments().getString(EXTRA_MESSAGE);
View v = inflater.inflate(R.layout.myfragment_layout, container, false);
TextView messageTextView = (TextView) v.findViewById(R.id.textView);
messageTextView.setText(message);
// OpenPdf();
return v;
}
public void onclick(View v) {
com.respond("Fragment ");
}
}
这是 my_fragment2 xml 文件
view plainprint?
Note: Text content in the code blocks is automatically word-wrapped
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/Fragment2"
android:orientation="vertical" >
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textAppearance="?android:attr/textAppearanceLarge"/>
</RelativeLayout>
当我运行该应用程序时,它会给我第一个带有按钮的 fragment 。当我点击按钮时,它会给我以下错误
view plainprint?
Note: Text content in the code blocks is automatically word-wrapped
10-07 09:37:52.610: E/AndroidRuntime(10907): FATAL EXCEPTION: main
10-07 09:37:52.610: E/AndroidRuntime(10907): java.lang.NullPointerException
10-07 09:37:52.610: E/AndroidRuntime(10907): at src.com.programmingmobile.pageviewer.PageViewActivity.respond(PageViewActivity.java:66)
10-07 09:37:52.610: E/AndroidRuntime(10907): at src.com.programmingmobile.pageviewer.MyFragment$1.onClick(MyFragment.java:63)
10-07 09:37:52.610: E/AndroidRuntime(10907): at android.view.View.performClick(View.java:3620)
10-07 09:37:52.610: E/AndroidRuntime(10907): at android.view.View$PerformClick.run(View.java:14322)
10-07 09:37:52.610: E/AndroidRuntime(10907): at android.os.Handler.handleCallback(Handler.java:605)
10-07 09:37:52.610: E/AndroidRuntime(10907): at android.os.Handler.dispatchMessage(Handler.java:92)
10-07 09:37:52.610: E/AndroidRuntime(10907): at android.os.Looper.loop(Looper.java:137)
10-07 09:37:52.610: E/AndroidRuntime(10907): at android.app.ActivityThread.main(ActivityThread.java:4507)
10-07 09:37:52.610: E/AndroidRuntime(10907): at java.lang.reflect.Method.invokeNative(Native Method)
10-07 09:37:52.610: E/AndroidRuntime(10907): at java.lang.reflect.Method.invoke(Method.java:511)
10-07 09:37:52.610: E/AndroidRuntime(10907): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978)
10-07 09:37:52.610: E/AndroidRuntime(10907): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
10-07 09:37:52.610: E/AndroidRuntime(10907): at dalvik.system.NativeStart.main(Native Method)
给出空指针的行在下面
view plainprint?
Note: Text content in the code blocks is automatically word-wrapped
MyFragment2 fragment = (MyFragment2) getSupportFragmentManager().findFragmentById(R.id.Fragment2);
最佳答案
查看 source for FragmentPagerAdapter , 他们使用 FragmentManager.findFragmentByTag(name)
其中 name
的形式是
"android:switcher:" + viewId + ":" + id;
其中 viewId
是 ViewPager
的 android:id
而 id
是 的结果getItemId(position)
(在您的情况下可能只是位置)。
注意:这是不安全的,并且可能会随着支持库的版本而变化。它在所有以前的版本中都保持不变,但您应该考虑 setting up an event callback interface在您的两个组件之间(从技术上讲,在您的第一个 fragment 、 Activity 和第二个 fragment 之间)。
关于android - getSupportFragmentManager().findFragmentById 给了我一个 nullPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227461/
我有一个管理 fragment 列表的 Activity 。其中之一是 ListFragment,当 Activity 试图在 Create() 期间找到它时,我得到一个 Null 异常。 Cause
我在 mainActivity 的导航模式下使用操作栏。不同的选项卡有不同的布局,在其中一个选项卡上,我嵌入了一个内部有 MapFragment 的布局。使用以下代码,应用程序运行良好,mapFrag
我创建了一个 fragment 来显示我的回收站 View 。所以我使用方法 findFragmentById() 来查找我的 xml 文件。问题是每次我旋转屏幕时,它都会在另一个之上创建一个回收器
我在访问 map fragment 时遇到问题。getFragmentManager().findFragmentById(R.id.map)) 总是返回 null。我不知道为什么。有什么问题? 谢谢
我遇到了一个疯狂的小“错误”,或者我只是做错了什么。我正在尝试获取对 fragment 内 fragment 的引用。所以我们有 ParentFragment,它是 MainActivity 的子项。
我在 xml 布局中为我的 fragment 定义一个 ID: 当我使用 fragment 的 id 调用 findFragmentById() 时,它返回 null。 activity_main.xml MainActi
我有带 viewpager 的应用程序。当我单击第一个 fragment 上的按钮时,我需要调用其他 fragment 方法。 这是我的邮件 Activity view plainprint? Not
我刚刚将一个 Android 项目迁移到 gradle。迁移前一切正常。我有相同的布局文件。我的仓库在这里: https://github.com/jackygrahamez/MayDay/tree/
我试图在我的应用程序中显示 GoogleMap,但我在这项任务开始时遇到了问题。线路: SupportMapFragment mapFrag = (SupportMapFragment) getAct
我试图在 fragment 之间传递数据,但我无法访问我的 fragment 以从中获取元素。我有多个 fragment 显示在 main.xml 的 FrameLayout 中,其 id 是“内容”
我刚刚将一个旧的 Android 项目从 Eclipse 切换到 Android Studio,在这个过程中我从旧的支持库版本 19.0.1 进行了更新。至 22.2.0 .在此之后,我在以前的工作代
activity_fragment.xml代码: CrimeListActivity.java代码 package com.sinory.criminalintent; import androi
以下行不编译: var mapFragment = FragmentManager.FindFragmentById(Resource.Id.map); Error CS0120 An object
您好,我有包含更多 fragment 的 viewpager。在第三个 View 上,我想放 map 。 我的 map 布局。(fragment_poloha ↓) 我有这个类来设置网页
我正在尝试在 android 中实现 fragment 通信,就像 android 指南 http://developer.android.com/guide/components/fragments
我尝试通过以下方式获取特定片段: RohwareFragmentMatlist fragment = (RohwareFragmentMatlist)getFragmentManager().f
我正在尝试获取 fragment 的实例来调用其中的某些函数。不同寻常的是,我从 getFragmentManager().findFragmentById(id) 函数中获取 null 。但是,在另
我正在尝试使用本指南构建 Facebook 登录:https://developers.facebook.com/docs/android/scrumptious/authenticate ,并且我在
我正在尝试使用 findFragmentById() 获取 fragment 引用,但它总是返回空对象。我使用了 FragmentPagerAdapter 并附加了一个 OnPageChangeLis
我是一名优秀的程序员,十分优秀!