آموزش ارسال داده از اکتیویتی به فرگمنت در اندروید

امتیاز 5.00 ( 1 رای )

سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ارسال داده از اکتیویتی به فرگمنت در اندروید می پردازیم فرگمنت ها و اکتیویتی ها مهمترین بخش ها در برنامه نویسی هستند توصیه می کنم این مبحث را به خوبی یاد بگیرید در این آموزش خواهید دید به سادگی داده ها را از اکتیویتی به فرگمنت ارسال خواهیم کرد با ما همراه باشید.
باید سه کار انجام شود .
اولین کار استفاده از bundle برای قرار دادن داده

Bundle data = new Bundle();
data.putString("key_value", "Programchi.ir");

دومین کار SetArguments برای پاس دادن دیتا

fragmentName.setArguments(data);

در بالا fragmentName نام فرگمنتی است که شما ساخته اید.
سومین کار دریافت یا GetArguments

String getArgument = getArguments().getString("key_value");

شاید کمی گیج شده باشید در ادامه به یک آموزش کاربردی خواهیم دید.
ما یک فایل به نام  activity_main.xml داریم که کد های زیر را در آن قرار دهید.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/setDefaultFragment"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Default Fragment" />
        <Button
            android:id="@+id/setArgumentFragment"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Argument Fragment" />
    </LinearLayout>
    <!--  Frame Layout for placing Fragments  -->
    <FrameLayout
        android:id="@+id/fragmentContainer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    </FrameLayout>
</LinearLayout>

دو دکمه برای قرار دادن و به دست آوردن داده قرار دارد و یک Frame Layout داریم که برای نمایش fragment مون داریم.
یک فایل به نام fragmentlayout.xml در layout خود درست کرده و کد های زیر را در آن قرار دهید.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ff00"
    android:gravity="center"
    android:orientation="vertical">
    <TextView
        android:id="@+id/fragmentText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Default Text"
        android:textColor="#ffffff"
        android:textSize="20sp" />
</LinearLayout>

حالا باید کد های مربوط به فرگمنت را قرار دهید پس یک فایل به نام DefaultFragment.java ایجاد کرده و کدهای زیر را در آن قرار دهید.

package com.fragmentsetargument_demo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
 * Created by Jefferson on 07/10/17.
 */
public class DefaultFragment extends Fragment {
    //Simple Fragment
    public DefaultFragment() {
    }
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragmentlayout, container, false);
    }
}

یک فایل دیگر به نام ArgumentFragment.java ایجاد کرده و کد های زیر را در آن قرار دهید.

package ir.programchi;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
 * Created by Jefferson on 07/10/17.
 */
public class ArgumentFragment extends Fragment {
    public ArgumentFragment() {
    }
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragmentlayout, container, false);//Inflate Layout
        TextView text = (TextView) view.findViewById(R.id.fragmentText);//Find textview Id
        String getArgument = getArguments().getString("data");
        text.setText(getArgument);//set string over textview
        return view;//return view
    }
}

و در آخر کد مربوط به MainActivity.java همانند زیر می شود.

package ir.programchi;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static Button defaultFragment, argumentFragment;
    private static FragmentManager fragmentManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fragmentManager = getSupportFragmentManager();//Get Fragment Manager
        //Find Ids
        defaultFragment = (Button) findViewById(R.id.setDefaultFragment);
        argumentFragment = (Button) findViewById(R.id.setArgumentFragment);
        defaultFragment.setOnClickListener(this);
        argumentFragment.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.setDefaultFragment:
                fragmentManager.beginTransaction().replace(R.id.fragmentContainer, new DefaultFragment()).commit();
                break;
            case R.id.setArgumentFragment:
                Fragment argumentFragment = new ArgumentFragment();//Get Fragment Instance
                Bundle data = new Bundle();//Use bundle to pass data
                data.putString("data", "This is Argument Fragment");//put string, int, etc in bundle with a key value
                argumentFragment.setArguments(data);//Finally set argument bundle to fragment
                fragmentManager.beginTransaction().replace(R.id.fragmentContainer, argumentFragment).commit();
                break;
        }
    }
}

 
این آموزش هم به پایان رسید.
 
موفق و موید باشید.

مطالعه بیشتر