私は2つのフラグメントを1つのアクティビティに持っています。 categoryFragment.javaで選択されたカテゴリに基づいて、サブカテゴリは別のフラグメント(SubcategoryFragment.java)に表示されますonフラグメントを1つにして、同じホストアクティビティで別のフラグメントのtextviewを変更してください。
現在、categoryfragmentでtextviewをクリックすると、サブカテゴリが表示されます。代わりに、テキストビューがクリックで追加されます。
私もreplcaeフラグメントを試しました。しかし、フラグメントトランザクションを2回コミットすることはできません。どこが間違っているか教えてください。
MainActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
itemsList.add(new Items(1,"Drinks","Coca Cola",10,1,"image.jpg"));
itemsList.add(new Items(2,"Drinks","Pepsi",30,1,"image.jpg"));
itemsList.add(new Items(3,"Food","Briyani",30,1,"image.jpg"));
itemsList.add(new Items(4,"Food","meals",30,1,"image.jpg"));
bundle.putParcelableArrayList("itemsList", itemsList);
bundle.putString("category","none");
frg.setArguments(bundle);
frg1.setArguments(bundle);
transaction.add(R.id.My_Container_1_ID, frg, "Frag_Top_tag");
transaction.add(R.id.My_Container_2_ID, frg1, "Frag_Middle_tag");
transaction.commit();
}
@Override
public void onFragmentInteraction(Integer id) {
String category = "";
itemsList.add(new Items(1,"Drinks","Coca Cola",10,1,"image.jpg"));
itemsList.add(new Items(2,"Drinks","Pepsi",30,1,"image.jpg"));
itemsList.add(new Items(3,"Food","Briyani",30,1,"image.jpg"));
itemsList.add(new Items(4,"Food","meals",30,1,"image.jpg"));
for(int i=0; i<itemsList.size();i++)
{
if(i == itemsList.get(id).getItemId() - 1)
category = itemsList.get(i).getCategory();
}
((SubCategoryFragment)getSupportFragmentManager().findFragmentById(R.id.My_Container_2_ID)).getSelectedCategory(category);
}
CategoryFragmnet.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view;
view = inflater.inflate(R.layout.fragment_category, container, false);
Bundle bundle = this.getArguments();
ArrayList<Items> myValue;
myValue = bundle.getParcelableArrayList("itemsList");
TextView textView = (TextView) view.findViewById(hello);
textView.setOnClickListener(this);
String cat="";
for(int i=0; i<myValue.size();i++)
{
cat = cat + myValue.get(i).getCategory() +" ";
}
textView.setText(cat);
return view;
}
OnFragmentInteractionListener dataPasser;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
dataPasser = (OnFragmentInteractionListener) context;
}
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.hello:
mListener.onFragmentInteraction(1);
break;
}
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Integer id);
}
SubCategoryFragment.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view;
view = inflater.inflate(R.layout.fragment_sub_category, container, false);
return view;
}
public void onViewCreated(View v, Bundle savedInstanceState) {
super.onViewCreated(v, savedInstanceState);
Bundle bundle = this.getArguments();
myValue = bundle.getParcelableArrayList("itemsList");
String category = bundle.getString("category");
textView = (TextView) v.findViewById(R.id.subh);
}
@Override
public void onResume(){
super.onResume();
}
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.OnSubFragmentInteractionListener(uri);
}
}
OnSubFragmentInteractionListener dataPasser;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnSubFragmentInteractionListener) {
mListener = (OnSubFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
dataPasser = (OnSubFragmentInteractionListener) context;
}
public interface OnSubFragmentInteractionListener {
void OnSubFragmentInteractionListener(Uri uri);
}
public void getSelectedCategory(String str)
{
textView = (TextView) getView().findViewById(R.id.subh);
textView.setText(" ");
String cat="";
for(int i=0; i<myValue.size();i++)
{
if(str.equals(myValue.get(i).getCategory()))
cat = cat + myValue.get(i).getSubCategory() +" ";
}
textView.setText(cat);
}
あるフラグメントから別のフラグメントにデータを渡すことができます。しかし、フラグメント2の私のテキストビューは置き換えられていません、それは追加されます。 –
これを参考にしてみてください(https://developer.android.com/training/basics/fragments/communicating.html)。 – yoyo97