如何从一个片段的数据传递给其他的机器人? [英] How to pass data from one fragment to other in android?

查看:117
本文介绍了如何从一个片段的数据传递给其他的机器人?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了两个片段的名称是Frag_A和Frag_B。在Frag_A我显示列表视图中的所有数据。 并且还具有更新按钮。在Frag_B有编辑的文本和保存按钮。 首先,当用户从列表中选择查看一个项目,然后单击upadate。当点击更新Frag_A由Frag_B替换并显示在编辑文本的选择列表视图中选择的项目和用户进行更改,并save.How才达到这个演示? 先谢谢了。

我的DatabaseAdapter文件是DBAdapter.java文件

 包com.dlcpl.insert_view;

进口的java.util.ArrayList;
进口的java.util.List;

进口android.content.ContentValues​​;
进口android.content.Context;
进口android.database.Cursor;
进口android.database.SQLException;
进口android.database.sqlite.SQLiteDatabase;
进口android.database.sqlite.SQLiteOpenHelper;
进口android.util.Log;

公共类DBAdapter {

    公共静态最后弦乐KEY_TEXT =文本;
    公共静态最终字符串变量=DBAdapter;

    公共静态最后弦乐DATABASE_NAME =taskmanager.db;
    公共静态最后弦乐DATABAS_TABLE =text_table;
    公共静态最终诠释DATABASE_VERSION = 1;

    公共静态最后弦乐DATABASE_CREATE =创建表+ DATABAS_TABLE +(+ KEY_TEXT +VARCHAR(500)NOT NULL);;
    公众最终上下文的背景下;
    公共DatabaseHelper DBHelper;
    公共SQLiteDatabase分贝;

    公共DBAdapter(上下文CTX)
    {
        this.context = CTX;
        DBHelper =新DatabaseHelper(上下文);
    }

    私有静态类DatabaseHelper扩展SQLiteOpenHelper
    {
        公共DatabaseHelper(上下文的背景下)
        {
            超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
        }

        @覆盖
        公共无效的onCreate(SQLiteDatabase DB)
        {
            尝试
            {
                db.execSQL(DATABASE_CREATE);
            }
            赶上(的SQLException E)
            {
                e.printStackTrace();
            }
        }

        @覆盖
        公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页)
        {
            Log.w(TAG,从版本升级数据库+ oldVersion +到+动态网页+,这将销毁所有旧数据);
            db.execSQL(DROP TABLE IF EXISTS text_table);
            的onCreate(DB);
        }
    }

    // ---打开数据库---
    公共DBAdapter的open()抛出的SQLException
    {
        DB = DBHelper.getWritableDatabase();
        回到这一点;
    }

    // ---关闭数据库---
    公共无效的close()
    {
        DBHelper.close();
    }

    // ---插入一个文本到数据库---
    众长insertText(字符串文本)
    {
        ContentValues​​ initialValues​​ =新ContentValues​​();
        initialValues​​.put(KEY_TEXT,文本);
        返回db.insert(DATABAS_TABLE,空,initialValues​​);
    }

    // ---删除特定联系人---
    公共布尔deleteContact(字符串文本)
    {
        返回db.delete(DATABAS_TABLE,KEY_TEXT +=+文字,NULL)> 0;
    }

    // ---检索所有文字
    / *公众光标getAlltext()
    {
        返回db.query(DATABAS_TABLE,新的String [] {} KEY_TEXT,NULL,NULL,NULL,NULL,NULL);
    } * /

    公开名单<的String []> getAlltext()
    {

        名单<的String []>名单=新的ArrayList<的String []>();
        光标光标= db.query(DATABAS_TABLE,新的String [] {} KEY_TEXT,NULL,NULL,NULL,NULL,NULL);

        INT X = 0;
        如果(cursor.moveToFirst()){
            做 {
                的String [] B1 =新的String [] {cursor.getString(0)};

                list.add(B1);

                X = X + 1;
            }而(cursor.moveToNext());
        }
        如果(光标=空&安培;!&安培;!cursor.isClosed()){
            cursor.close();
        }
        cursor.close();

        返回列表;
    }

    // ---检索特定联系人---
    公共光标的gettext(字符串字符串)抛出的SQLException
    {
        光标mCursor = db.query(真,DATABAS_TABLE,新的String [] {} KEY_TEXT,KEY_TEXT +=+字符串,NULL,NULL,NULL,NULL,NULL);

        如果(mCursor!= NULL)
        {
            mCursor.moveToFirst();
        }
        返回mCursor;
    }

    // ---更新一个text_table ---
    公共布尔updateContact(字符串文本)
    {
        ContentValues​​的args =新ContentValues​​();
        args.put(KEY_TEXT,文本);
        返回db.update(DATABAS_TABLE,ARGS,KEY_TEXT +=+文字,NULL)> 0;
    }

}
 


我Frag_A文件是View_Data.java

 包com.dlcpl.insert_view;

进口的java.util.ArrayList;
进口的java.util.List;

进口android.os.Bundle;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ArrayAdapter;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.ListView;
进口android.widget.TextView;
//进口android.widget.Toast;
进口android.app.ListFragment;
进口android.graphics.Color;
公共类View_Data扩展ListFragment
{
     公共静态最后弦乐ROW_ID =ROW_ID;
     ListView控件的ListView;
    TextView的选择;
    TextView的LABEL1;
    公众诠释idToModify;
    名单<的String []>名单=新的ArrayList<的String []>();
    名单<的String []> names2 = NULL;
    的String [] STG1;
    A_INPUT的EditText;
    @覆盖
    公共查看onCreateView(LayoutInflater充气,
    ViewGroup中的容器,包savedInstanceState){

         返回inflater.inflate(R.layout.view_data,集装箱,假);
    }

    @覆盖
    公共无效的OnStart()
    {
        super.onStart();
    DBAdapter dbAdapter =新DBAdapter(getActivity());
        dbAdapter.open();
         names2 = dbAdapter.getAlltext();
         STG1 =新的String [names2.size()];
         INT X = 0;
            字符串英镑;

            对于(字符串[]名称:names2){
                英镑=名称[0];

                STG1 [X] =英镑;
                X ++;
            }
         setListAdapter(新ArrayAdapter<字符串>(getActivity(),android.R.layout.simple_list_item_1,STG1));


         按钮btnLoad =(按钮)getActivity()findViewById(R.id.updata)。


            btnLoad.setOnClickListener(新View.OnClickListener(){
                 公共无效的onClick(视图v){

                     android.app.FragmentManager fragmentManager = getFragmentManager();
                     android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                     Update_data了updateData =新Update_data();
                      fragmentTransaction.replace(R.id.fragment,了updateData);


                      fragmentTransaction.commit();
                     }
                 });

        dbAdapter.close();

    }
     公共无效onListItemClick(ListView的父,视图V,INT位置,长ID)
        {

            对于(INT一= 0; A< parent.getChildCount(); A ++)
            {
                parent.getChildAt(一).setBackgroundColor(Color.WHITE);

            }
            TextView的卷标1 =(TextView中)getActivity()findViewById(R.id.textdisplay)。
           v.setBackgroundColor(Color.LTGRAY);
           label1.setText(STG1 [位置]);
        }
}
 

和Frag_B文件Update_data.java

 包com.dlcpl.insert_view;

进口android.app.Fragment;
进口android.database.Cursor;
进口android.os.Bundle;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.Button;
进口android.widget.EditText;
//进口android.widget.ListView;
进口android.widget.TextView;
//进口android.support.v4.app.Fragment;
进口android.widget.Toast;

公共类Update_data扩展片段
{
    //文本字符串;
    A_INPUT的EditText;
     TextView的LABEL1;


    @覆盖
    公共查看onCreateView(LayoutInflater充气,
    ViewGroup中的容器,包savedInstanceState)
    {
         返回inflater.inflate(R.layout.update,集装箱,假);
    }

    @覆盖
    公共无效的OnStart()
    {
        super.onStart();
        按钮btnLoad =(按钮)getActivity()findViewById(R.id.save_btn)。
         = A_INPUT(EditText上)getActivity()findViewById(R.id.udate_text)。

            btnLoad.setOnClickListener(新View.OnClickListener(){
                DBAdapter适配器=新DBAdapter(getActivity());

                公共无效的onClick(视图v){

                    Adapter.open();
                     光标C = Adapter.gettext(文字);
                        如果(c.moveToFirst())
                        {
                        DisplayContact(C);
                        }
                        其他
                        {
                        Toast.makeText(getActivity(),不接触发现,Toast.LENGTH_LONG).show();

                        }
                        Adapter.close();

                     }
                 });


    }
    公共无效DisplayContact(光标C)
    {
        A_input.setText(c.getString(0));

    }

}
 

和我的主要活动文件是Home.java

 包com.dlcpl.insert_view;

进口android.app.Activity;
进口android.os.Bundle;
//进口android.support.v4.app.FragmentActivity;
进口android.view.Menu;
进口android.view.View;
进口android.widget.Button;


公共类家庭延伸活动{

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_home);

   按钮insertData =(按钮)findViewById(R.id.button1);
        insertData.setOnClickListener(新View.OnClickListener(){
            公共无效的onClick(视图查看){
                Insert_Data insertdata =新Insert_Data();
                 android.app.FragmentManager fragmentManager = getFragmentManager();
                 android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                 fragmentTransaction.replace(R.id.fragment,insertdata);
                 fragmentTransaction.commit();
            }

        });

      按钮可视数据=(按钮)findViewById(R.id.button2);
        viewData.setOnClickListener(新View.OnClickListener(){
            公共无效的onClick(视图查看){
                View_Data可视数据=新View_Data();
                 android.app.FragmentManager fragmentManager = getFragmentManager();
                 android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                 fragmentTransaction.replace(R.id.fragment,可视数据);
                 fragmentTransaction.commit();
            }

        });
    }

    @覆盖
    公共布尔onCreateOptionsMenu(功能菜单){
        。getMenuInflater()膨胀(R.menu.activity_home,菜单);
        返回true;
    }
}
 

解决方案

由于两者的片段共享相同的活动主页,你可以用它来分享两个片段之间的信息。 View_Data可致电:

 ((首页)getActivity())shareData(比如字符串)。
 

这可以对应于方法shareData()主页:

 公共无效shareData(字符串字符串){
    android.app.FragmentManager fragmentManager = getFragmentManager();
    Update_data片段=(Update_data)fragmentManager.findFragmentByTag(your_tag);
    fragment.update(串);
}
 

您需要设置你的第二个片段的ID,这样的片段管理器能够找到的片段,并创建你的第二个片段的公共方法,更新。

编辑:要设置一个片段的标签,更改您的片段加code到包括标签your_tag

  View_Data可视数据=新View_Data();
android.app.FragmentManager fragmentManager = getFragmentManager();
android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment,可视数据,your_tag);
fragmentTransaction.commit();
 

I am created two fragments name are Frag_A and Frag_B. In Frag_A I display all data in listview. and also having update button. In Frag_B having Edit text and save button. Firstly when user select one item from list view and then click upadate. when click on update Frag_A is replace by Frag_B and Display the selected item from selected List View in edit text and user make changes and save.How to achive this demo? Thanks in advance.

My DatabaseAdapter file is DBAdapter.java file

package com.dlcpl.insert_view;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBAdapter {

    public static final String KEY_TEXT="text";
    public static final String TAG="DBAdapter";

    public static final String DATABASE_NAME="taskmanager.db";
    public static final String DATABAS_TABLE="text_table";
    public static final int DATABASE_VERSION=1;

    public static final String DATABASE_CREATE="create table "+DATABAS_TABLE+"("+KEY_TEXT+" varchar(500) not null);";
    public final Context context;
    public DatabaseHelper DBHelper;
    public SQLiteDatabase db;

    public DBAdapter(Context ctx)
    {
        this.context=ctx;
        DBHelper=new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper
    {
        public DatabaseHelper(Context context)
        {
            super(context,DATABASE_NAME,null,DATABASE_VERSION );
        }

        @Override
        public void onCreate(SQLiteDatabase db)
        {
            try
            {
                db.execSQL(DATABASE_CREATE);
            }
            catch(SQLException e)
            {
                e.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
            Log.w(TAG,"Upgrading database from version"+oldVersion+"to"+newVersion+",which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS text_table");
            onCreate(db);
        }
    }

    //---opens the database---
    public DBAdapter open() throws SQLException
    {
        db=DBHelper.getWritableDatabase();
        return this;
    }

    //---close the database---
    public void close()
    {
        DBHelper.close();
    }

    //---insert a text into the database---
    public long insertText(String text)
    {
        ContentValues initialValues=new ContentValues();
        initialValues.put(KEY_TEXT, text);
        return db.insert(DATABAS_TABLE, null, initialValues);
    }

    //---delete a particular contact---
    public boolean deleteContact(String text)
    {
        return db.delete(DATABAS_TABLE, KEY_TEXT + "=" + text, null) > 0;
    }

    //---retrieves all the text
    /*public Cursor getAlltext()
    {
        return db.query(DATABAS_TABLE, new String[] {KEY_TEXT}, null, null, null, null, null);
    }*/

    public List<String[]> getAlltext()
    {

        List<String[]> list = new ArrayList<String[]>();
        Cursor cursor = db.query(DATABAS_TABLE, new String[] {KEY_TEXT}, null, null, null, null, null); 

        int x=0;
        if (cursor.moveToFirst()) {
            do {
                String[] b1=new String[]{cursor.getString(0)};

                list.add(b1);

                x=x+1;
            } while (cursor.moveToNext());
        }
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        } 
        cursor.close();

        return list;
    }

    //---retrieves a particular contact---
    public Cursor gettext(String string) throws SQLException
    {
        Cursor mCursor= db.query(true, DATABAS_TABLE, new String[] {KEY_TEXT}, KEY_TEXT + "=" + string, null, null, null, null, null);      

        if(mCursor !=null)
        {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    //---updates a text_table---
    public boolean updateContact(String text)
    {
        ContentValues args=new ContentValues();
        args.put(KEY_TEXT, text);
        return db.update(DATABAS_TABLE, args, KEY_TEXT + "=" + text, null) > 0;
    }

}


my Frag_A File is View_Data.java

package com.dlcpl.insert_view;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
//import android.widget.Toast;
import android.app.ListFragment;
import android.graphics.Color;
public class View_Data extends ListFragment
{
     public static final String ROW_ID = "row_id";
     ListView listView;
    TextView selection;
    TextView label1;
    public int idToModify; 
    List<String[]> list = new ArrayList<String[]>();
    List<String[]> names2 =null ;
    String[] stg1;  
    EditText A_input;
    @Override
    public View onCreateView(LayoutInflater inflater,
    ViewGroup container, Bundle savedInstanceState) {

         return inflater.inflate(R.layout.view_data, container, false);
    }   

    @Override
    public void onStart()
    {
        super.onStart();
    DBAdapter dbAdapter =new DBAdapter(getActivity());
        dbAdapter.open();       
         names2 = dbAdapter.getAlltext();
         stg1=new String[names2.size()];
         int x=0;
            String stg;

            for (String[] name : names2) {
                stg = name[0];

                stg1[x]=stg;
                x++;
            }
         setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, stg1));


         Button btnLoad = (Button) getActivity().findViewById(R.id.updata);


            btnLoad.setOnClickListener( new View.OnClickListener() {             
                 public void onClick(View v) {  

                     android.app.FragmentManager fragmentManager = getFragmentManager();                
                     android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();                
                     Update_data updatedata = new Update_data(); 
                      fragmentTransaction.replace(R.id.fragment,updatedata);                         


                      fragmentTransaction.commit();           
                     }        
                 }); 

        dbAdapter.close();

    }
     public void onListItemClick(ListView parent, View v, int position, long id) 
        {       

            for(int a = 0; a < parent.getChildCount(); a++) 
            { 
                parent.getChildAt(a).setBackgroundColor(Color.WHITE);

            } 
            TextView label1=(TextView)getActivity().findViewById(R.id.textdisplay);
           v.setBackgroundColor(Color.LTGRAY);   
           label1.setText(stg1[position]);
        }   
}

and Frag_B file is Update_data.java

package com.dlcpl.insert_view;

import android.app.Fragment;
import android.database.Cursor;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
//import android.widget.ListView;
import android.widget.TextView;
//import android.support.v4.app.Fragment;
import android.widget.Toast;

public class Update_data  extends Fragment
{
    //String Text;
    EditText A_input;
     TextView label1;


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

    @Override
    public void onStart()
    {
        super.onStart();
        Button btnLoad = (Button) getActivity().findViewById(R.id.save_btn);
         A_input = (EditText)getActivity().findViewById(R.id.udate_text);

            btnLoad.setOnClickListener( new View.OnClickListener() {             
                DBAdapter Adapter =new DBAdapter(getActivity());

                public void onClick(View v) {                                

                    Adapter.open(); 
                     Cursor c = Adapter.gettext("text");
                        if (c.moveToFirst())
                        {
                        DisplayContact(c);
                        }
                        else
                        {
                        Toast.makeText(getActivity(), "No contact found", Toast.LENGTH_LONG).show();

                        }
                        Adapter.close();

                     }        
                 });  


    }
    public void DisplayContact(Cursor c)
    {  
        A_input.setText(c.getString(0));

    }

} 

and my Main Activity file is Home.java

package com.dlcpl.insert_view;

import android.app.Activity;
import android.os.Bundle;
//import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;


public class Home extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);        

   Button insertData = (Button) findViewById(R.id.button1);
        insertData.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Insert_Data insertdata = new Insert_Data();               
                 android.app.FragmentManager fragmentManager = getFragmentManager();                
                 android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();                
                 fragmentTransaction.replace(R.id.fragment,insertdata);                
                 fragmentTransaction.commit();              
            }

        });

      Button viewData = (Button) findViewById(R.id.button2);
        viewData.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                View_Data viewdata = new View_Data();               
                 android.app.FragmentManager fragmentManager = getFragmentManager();                
                 android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();                
                 fragmentTransaction.replace(R.id.fragment,viewdata);                
                 fragmentTransaction.commit();              
            }

        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_home, menu);
        return true;
    }
}

解决方案

As both of your fragments share the same activity "Home" you can use this to share information between the two fragments. View_Data could call:

((Home) getActivity()).shareData("example string");

Which could correspond to the method shareData() in Home:

public void shareData(String string){
    android.app.FragmentManager fragmentManager = getFragmentManager();                
    Update_data fragment = (Update_data) fragmentManager.findFragmentByTag( "your_tag" );
    fragment.update(string);
}

You will need to set the id of your second fragment so that the fragment manager is able to find the fragment and also create the public method "update" in your second fragment.

Edit: To set the tag of a fragment, change your fragment add code to include the tag "your_tag".

View_Data viewdata = new View_Data();               
android.app.FragmentManager fragmentManager = getFragmentManager();                
android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();                
fragmentTransaction.replace(R.id.fragment,viewdata,"your_tag");                
fragmentTransaction.commit();              

这篇关于如何从一个片段的数据传递给其他的机器人?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆