Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将值从MainActivity传递到扩展片段的Java_类失败_Java_Android_Android Fragments_Fragment - Fatal编程技术网

将值从MainActivity传递到扩展片段的Java_类失败

将值从MainActivity传递到扩展片段的Java_类失败,java,android,android-fragments,fragment,Java,Android,Android Fragments,Fragment,为了更好地理解片段的工作原理,我创建了一个mainactivity,它的布局有一个。我创建了两个java类extendfragment,每个类都有自己的布局 在扩展fragment的java类中,我在的activitycreated()中初始化了我的视图textview,如下所示,在同一类的代码中,我创建了两个方法setbttnclicks(int clicks)和getbtnclicks()。从main活动中,我将按钮的点击次数指定给setbtnclicks(),并尝试通过调用onActivi

为了更好地理解
片段的工作原理,我创建了一个
mainactivity
,它的布局有一个
。我创建了两个java类extend
fragment
,每个类都有自己的布局

在扩展
fragment
的java类中,我在
的activitycreated()
中初始化了我的视图
textview
,如下所示,在同一类的代码中,我创建了两个方法
setbttnclicks(int clicks)
getbtnclicks()
。从
main活动
中,我将按钮的点击次数指定给
setbtnclicks()
,并尝试通过调用
onActivivtyCreated()
内部的
getbtnclicks
来显示扩展
fragment
的类的
textview
上的点击次数。但问题是,此方法始终显示零,就好像单击次数没有增加一样

维护活动:

//global variable
private int i = 0;
...
...
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    Fragment mSelectedFragment;
    FragmentManager mFragmentManager;
    FragmentTransaction mFragmentTransaction;

    switch (v.getId()) {
    case R.id.btn00:    
        mSelectedFragment = new Fragment00();
        mFragmentManager = getFragmentManager();
        mFragmentTransaction = mFragmentManager.beginTransaction();
        mFragmentTransaction.replace(R.id.fragment00ID, mSelectedFragment);
        mFragmentTransaction.commit();
        mFragment00.setBtnClicks(i);
        i++;
        break;
Java_类“Fragment00”


片段事务之前的增量i

switch (v.getId()) {
case R.id.btn00:  
     i++;  
    mSelectedFragment = new Fragment00();
    mFragmentManager = getFragmentManager();
    mFragmentTransaction = mFragmentManager.beginTransaction();
    mFragmentTransaction.replace(R.id.fragment00ID, mSelectedFragment);
    mFragmentTransaction.commit();
    mFragment00.setBtnClicks(i);

    break;

一旦我实现了一个和你差不多的程序。目标是增加两个片段中的按钮点击次数。下面是代码。希望它能有所帮助:

MainActivity.java

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;


public class MainActivity extends Activity implements OnClickListener{
Button btn1,btn2;
int click1=0,click2=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1=(Button)findViewById(R.id.btn1);
        btn2=(Button)findViewById(R.id.btn2);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }
    @SuppressLint("NewApi")
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Fragment fragment = null;
         if (v == btn1) {
                // do stuff for button left
             click1++;

             Bundle bundle=new Bundle();
                String clickstring1=Integer.toString(click1);
                 bundle.putString("name1",clickstring1 );

             fragment = new FragButton1();


                    fragment.setArguments(bundle);


            }
         if (v == btn2) {
                // do stuff for button right
             click2++;
             Bundle bundle=new Bundle();
                String clickstring2=Integer.toString(click2);
             bundle.putString("name2",clickstring2 );
                fragment = new FragButton2();
                fragment.setArguments(bundle);
            }

         if (fragment != null) {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.frame_container, fragment).commit();
         }
         else{
             Log.e("MainActivity", "Error in creating fragment");
         }

    }



}
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@SuppressLint("NewApi")
public class FragButton1 extends Fragment{

    TextView tv;
public FragButton1(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragbutton1, container, false);
        String strtext=getArguments().getString("name1");
        tv=(TextView)rootView.findViewById(R.id.tv_times1);
        tv.setText(strtext);

        return rootView;
    }

}
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

@SuppressLint("NewApi")
public class FragButton2 extends Fragment{

    TextView tv2;
public FragButton2(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragbutton2, container, false);
        tv2=(TextView)rootView.findViewById(R.id.tv_times2);
        String strtext=getArguments().getString("name2");
        tv2.setText(strtext);
        return rootView;
    }


}
FragButton1.java

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;


public class MainActivity extends Activity implements OnClickListener{
Button btn1,btn2;
int click1=0,click2=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1=(Button)findViewById(R.id.btn1);
        btn2=(Button)findViewById(R.id.btn2);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }
    @SuppressLint("NewApi")
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Fragment fragment = null;
         if (v == btn1) {
                // do stuff for button left
             click1++;

             Bundle bundle=new Bundle();
                String clickstring1=Integer.toString(click1);
                 bundle.putString("name1",clickstring1 );

             fragment = new FragButton1();


                    fragment.setArguments(bundle);


            }
         if (v == btn2) {
                // do stuff for button right
             click2++;
             Bundle bundle=new Bundle();
                String clickstring2=Integer.toString(click2);
             bundle.putString("name2",clickstring2 );
                fragment = new FragButton2();
                fragment.setArguments(bundle);
            }

         if (fragment != null) {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.frame_container, fragment).commit();
         }
         else{
             Log.e("MainActivity", "Error in creating fragment");
         }

    }



}
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@SuppressLint("NewApi")
public class FragButton1 extends Fragment{

    TextView tv;
public FragButton1(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragbutton1, container, false);
        String strtext=getArguments().getString("name1");
        tv=(TextView)rootView.findViewById(R.id.tv_times1);
        tv.setText(strtext);

        return rootView;
    }

}
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

@SuppressLint("NewApi")
public class FragButton2 extends Fragment{

    TextView tv2;
public FragButton2(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragbutton2, container, false);
        tv2=(TextView)rootView.findViewById(R.id.tv_times2);
        String strtext=getArguments().getString("name2");
        tv2.setText(strtext);
        return rootView;
    }


}
FragButton2.java

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;


public class MainActivity extends Activity implements OnClickListener{
Button btn1,btn2;
int click1=0,click2=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1=(Button)findViewById(R.id.btn1);
        btn2=(Button)findViewById(R.id.btn2);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
    }
    @SuppressLint("NewApi")
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Fragment fragment = null;
         if (v == btn1) {
                // do stuff for button left
             click1++;

             Bundle bundle=new Bundle();
                String clickstring1=Integer.toString(click1);
                 bundle.putString("name1",clickstring1 );

             fragment = new FragButton1();


                    fragment.setArguments(bundle);


            }
         if (v == btn2) {
                // do stuff for button right
             click2++;
             Bundle bundle=new Bundle();
                String clickstring2=Integer.toString(click2);
             bundle.putString("name2",clickstring2 );
                fragment = new FragButton2();
                fragment.setArguments(bundle);
            }

         if (fragment != null) {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.frame_container, fragment).commit();
         }
         else{
             Log.e("MainActivity", "Error in creating fragment");
         }

    }



}
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@SuppressLint("NewApi")
public class FragButton1 extends Fragment{

    TextView tv;
public FragButton1(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragbutton1, container, false);
        String strtext=getArguments().getString("name1");
        tv=(TextView)rootView.findViewById(R.id.tv_times1);
        tv.setText(strtext);

        return rootView;
    }

}
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

@SuppressLint("NewApi")
public class FragButton2 extends Fragment{

    TextView tv2;
public FragButton2(){}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragbutton2, container, false);
        tv2=(TextView)rootView.findViewById(R.id.tv_times2);
        String strtext=getArguments().getString("name2");
        tv2.setText(strtext);
        return rootView;
    }


}

这里有两个按钮,点击一个按钮,将启动一个新的片段,片段将显示一个按钮在文本视图中被点击的次数。

我这样做了,但我得到了同样的结果,我也考虑过使用bundle,但你知道为什么没有bundle它不能工作吗?请回答另一个问题,“Bundle savedInstanceState”参数的用途是什么?如果它不具有包含
标记的mainActivity的所有值,则传递到OnActivity Created的参数“Bundle savedInstanceState”参数的用途是什么?我始终使用Bundle将数据从活动传递到片段。我不知道为什么没有Bundle它不起作用。还有“Bundle savedInstanceState”保存活动的状态,即,假设您要将一些有关方向更改的数据从potrait传递到横向。然后您可以将要保存的内容放入savedInstanceState,然后您可以通过方法public void on RestoreInstanceState从savedInstanceState检索保存的数据(Bundle savedInstanceState)