首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Fragment_b的Fragment_a获取数据

从Fragment_b的Fragment_a获取数据
EN

Stack Overflow用户
提问于 2014-09-03 16:05:07
回答 2查看 63关注 0票数 0

我已经在android.developer页面上看到了关于片段的内容,但我需要的是is:Fragment_A有一个EditText,而Fragment_B只有一个按钮。当我按下按钮时,我想在EditText的数据中制作一个Toast。

我该怎么做呢?谢谢你的帮助。

MainActivity:

代码语言:javascript
复制
package rs.sqllogin.androidloginsql;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements OnClickListener {

    EditText etUser, etPass;
    Button btnLogin;

    String username, password;
    // creat httpclient as the form container
    HttpClient httpclient;
    // httpPost method
    HttpPost httppost;
    // create an array list for the input data to be sent
    ArrayList<NameValuePair> nameValuePairs;
    // create a httpResponse and HttpEntity
    HttpResponse response;
    HttpEntity entity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initialise();

    }

    private void initialise() {
        etUser = (EditText) findViewById(R.id.etUser);
        etPass = (EditText) findViewById(R.id.etPass);
        btnLogin = (Button) findViewById(R.id.btnSubmit);

        btnLogin.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        // Toast.makeText(getApplicationContext(), "Gomb le lett nyomva",
        // Toast.LENGTH_LONG).show();
        if (etUser.getText().toString().equals("")
                || etPass.getText().toString().equals("")) {
            Toast.makeText(getApplicationContext(), "Enter some Data!",
                    Toast.LENGTH_LONG).show();
        } else {

            new HttpAsyncTask().execute();

        }

    }

    public String POST() {

        // Create a new deafult httpclient
        httpclient = new DefaultHttpClient();

        // Create a new HTTP Post with URL
        httppost = new HttpPost("http://10.0.2.2/checklogin.php");

        username = etUser.getText().toString();
        password = etPass.getText().toString();

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("username", username));
        nameValuePairs.add(new BasicNameValuePair("password", password));
        String str = "";

        try {
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            response = httpclient.execute(httppost);
            str = convertInputStreamToString(response.getEntity().getContent())
                    .toString();

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();
        } catch (ClientProtocolException e) {
            Log.e("Catch1", "ClientProtocolE");
            e.printStackTrace();
        } catch (IllegalStateException e) {
            Log.e("Catch2", "IllegalStatementE");
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            Log.e("Catch3", "IOExpection");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return str;

    }

    private static String convertInputStreamToString(InputStream inputStream)
            throws IOException {
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while ((line = bufferedReader.readLine()) != null)
            result += line;

        inputStream.close();
        return result;

    }

    private class HttpAsyncTask extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... params) {

            return POST();
        }

        @Override
        protected void onPostExecute(String result) {

            super.onPostExecute(result);

            if (result.toString().equals("true")) {

                MyFragmentAdapter adapter = new MyFragmentAdapter(
                        getSupportFragmentManager());
                ViewPager p = (ViewPager) findViewById(R.id.pager);
                p.setAdapter(adapter);
                p.setCurrentItem(MyFragmentAdapter.NUM_ITEMS - 2);

            } else {
                Toast.makeText(getApplicationContext(),
                        "Helytelen bejelentkezes!", Toast.LENGTH_LONG).show();
            }
        }

    }

}

挂起UI的onPostExecute ..

MyFragmentAdapter.java:

代码语言:javascript
复制
package rs.sqllogin.androidloginsql;

import java.util.ArrayList;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyFragmentAdapter extends FragmentPagerAdapter {

    public static final int NUM_ITEMS = 2;
    private ArrayList<Fragment> fragments;

    public MyFragmentAdapter(FragmentManager fm) {
        super(fm);

        fragments = new ArrayList<Fragment>();
        fragments.add(new FragmentOne());
        fragments.add(new FragmentTwo());
    }

    @Override
    public Fragment getItem(int pos) {

        return fragments.get(pos);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return NUM_ITEMS;
    }

}

FragmentOne.java:

代码语言:javascript
复制
package rs.sqllogin.androidloginsql;

import java.util.ArrayList;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyFragmentAdapter extends FragmentPagerAdapter {

    public static final int NUM_ITEMS = 2;
    private ArrayList<Fragment> fragments;

    public MyFragmentAdapter(FragmentManager fm) {
        super(fm);

        fragments = new ArrayList<Fragment>();
        fragments.add(new FragmentOne());
        fragments.add(new FragmentTwo());
    }

    @Override
    public Fragment getItem(int pos) {

        return fragments.get(pos);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return NUM_ITEMS;
    }

}

FragmentTwo.java:

代码语言:javascript
复制
package rs.sqllogin.androidloginsql;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;


public class FragmentTwo extends Fragment implements OnClickListener{

    public static final String TAG = "FragmentTwo";



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = View.inflate(getActivity(), R.layout.fragmenttwo, null);
        Button btnSend = (Button) v.findViewById(R.id.btn1);
        btnSend.setOnClickListener(this);



        return v;


    }



    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }



}
EN

回答 2

Stack Overflow用户

发布于 2014-09-03 16:24:01

要访问从一个片段到另一个片段的任何内容,您可以创建其静态实例,如下所示-

代码语言:javascript
复制
private static FragmentOne fragmentOne;

    public static FragmentOne getInstance() {
        if (fragmentOne == null) {
            fragmentOne = new FragmentOne();
        }
        return fragmentOne;
    }

//you have edit text
public EditText myEditText;

现在在第二个片段中,您可以通过以下方式访问它:

代码语言:javascript
复制
FragmentOne.getInstance().myEditText
票数 0
EN

Stack Overflow用户

发布于 2014-09-03 16:28:08

EditTextButton位于不同Fragments中的任何特殊原因

我认为这更多的是一个设计问题而不是编程问题。

片段应该包含UI的自治部分(例如表单)。每个片段应该尽可能少地了解另一个片段。

如果提交时确实需要显示Toast,可以在Activity中显示。在Fragment_B中添加监听器:

代码语言:javascript
复制
public static interface FragmentBListener
{
   void onSubmit();
{

Fragment_B

代码语言:javascript
复制
private FragmentBListener mListener;
@Override
public void onAttach(Activity activity)
{
    super.onAttach(activity)
    try{
        mListener = (FragmentBListener) activity;
    }
    catch( ClassCastException e )
    {
         throw new IllegalArgumentException("Activity must iimplement FragmentBListener!");
    }

}

FragmentA add方法中

代码语言:javascript
复制
public String getSubmitedText()
{
    return mEditTextInstance.getText().toString;
}

Activity中实现你的FragmentBListener

代码语言:javascript
复制
@Override
public void onSubmit()
{

    String toastMessage = mFragmentA.getSubmitedText();
    //show Toast
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25639279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档