2017-08-21 3 views
0

に私はアンドロイドに新しいですし、私は以下の意図を使用してクリック上の後、アダプタからの私のMapFragmentを呼び出すようにしようとしていますように断片化するアダプタを渡すことができます私のコードの下には、どのように私は意図

は、アダプタのコードです:

public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    final BusInfo info = getItem(position); 
    View view = LayoutInflater.from(context).inflate(R.layout.bus_only_list,null); 
    TextView busname; 
    busname = (TextView) view.findViewById(R.id.busname); 
    busname.setText(info.name); 
    view.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     pref = context.getSharedPreferences("busInfo",Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = pref.edit(); 
     editor.putString("bus_name",info.name); 
     editor.commit(); 

     Intent intent = new Intent(context, MapsFragment.class); 
     intent.putExtra("name",info.name); 
     context.startActivity(intent);>  

    } 
    }); 

    return view; 
} 

インテントを使用してmapfragmentに渡したいのですが、MapFragmentの代わりにMainActivityにリダイレクトします。 MainActivityへの移行を中止するにはどうすればよいですか?

ありがとうございます。

+1

あなたは、このためのインターフェイスを使用することができます.... –

+0

あなたが断片 – Redman

+0

をロードする意図を使用することはできません質問は本当に明確ではないですが、あなたは、フラグメントAにあり、クリックした後、あなたが断片Bに行きたい場合は同じアクティビティで、あなたのonclickはMainActivityにフラグメントBに切り替えるよう指示します。フラグメントBに直接関係する操作は一切行わないでください。MainActivityは、FragmentManagerまたはSupportFragmentManagerを使用してフラグメントを切り替えることができます。 – Juan

答えて

0

前に言いましたように: 1.コールバックを使用するか、コンテクストにキャストするだけです(アクティビティはフラグメント自体の変更を処理する必要があります)。 2.フラグメントを変更するには、アクティビティのFragmentManager - インテントを使用して別のアクティビティを開始します。

Fragments Documentation

0

あなたはフラグメントに意図を渡すことはできません。代わりにバンドルを使用してみてください。あなたのフラグメント(MapsFragment)で

Bundle bundle = new Bundle(); 

bundle.putString("name", info.name); 

mapFragment.setArguments(bundle) 

このようバンドルを取得:

Bundle bundle = this.getArguments(); 

if(bundle != null){ 
    String infoName = bundle.getString("name"); 
} 
2

newInstance方法を使用しているフラグメントに値を渡すに共通するパターン。このメソッドでは、値を送信する手段として、引数にフラグメントを設定できます。

public class YourFragment extends Fragment { 
    ... 

    // Creates a new fragment with bus_name 
    public static YourFragment newInstance(String busName) { 
    YourFragment yourFragment = new YourFragment(); 
    Bundle args = new Bundle(); 
    args.putString("bus_name", busName); 
    yourFragment.setArguments(args); 
    return yourFragment; 
    } 

    ... 
} 

が次にあなたがonCreateで値を取得することができます:

:あなたとあなたの活動からのフラグメントに値を設定することができます

public class YourFragment extends Fragment { 
    ... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // Get the value from arguments 
    String busName = getArguments().getString("bus_name", ""); 
    } 

    ... 
} 

まず、newInstanceメソッドを作成します

FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction(); 
YourFragment yourFragment = YourFragment.newInstance("bus_name_value"); 
fragTransaction.replace(R.id.fragment_place_holder, yourFragment); 
fragTransaction.commit(); 

上記のコードを使用して、F荒廃初期化。

あなたは既にインスタンスフラグメントに値を設定したい場合は、値を設定するメソッドを呼び出し、メソッドを作成することができます。今すぐ

public class YourFragment extends Fragment { 
    ... 

    public setBusName(String busName) { 
    // set the bus name to your fragment. 
    } 

    ... 
} 

を、アクティビティでは、あなたがそれを呼び出すことができます。

// R.id.yourFragment is the id of fragment in xml 
YourFragment yourFragment = (YourFragment) getSupportFragmentManager() 
          .findFragmentById(R.id.yourFragment); 
yourFragment.setBusName("bus_name_value"); 
関連する問題