0

次のフラグメントがあります。

public class ChooseAssigmentFragment extends Fragment {
private ListArrayAdapter listArrayAdapter;

private Assigments assigments;

private ListView assigList;

private Assigment assigment;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.assigments, container, false);
    init(v);
    assigments = new Assigments();
    ((MainFragmentActivity) getActivity()).getConfigAssigments();
    loadAssigments(assigments);
    return v;
}

private void init(View v) {
    // TODO Auto-generated method stub
    final EditText assigSearchET = (EditText) v.findViewById(R.id.AssigSearch);
    final ImageButton assigSearchIB = (ImageButton) v.findViewById(R.id.AssigSB);
    assigSearchET.setVisibility(View.VISIBLE);
    assigSearchIB.setVisibility(View.VISIBLE);
    assigList = (ListView) v.findViewById(R.id.assigListView);
    alert();

    assigList.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> assigList, View v, int position, long id) {
            Assigment assigment = ((ListArrayAdapter) assigList.getAdapter()).getItem(position);
            LogService.log(getTag(), "position: " + position);
            assigSearchET.setVisibility(View.GONE);
            assigSearchIB.setVisibility(View.GONE);
            ((MainFragmentActivity) getActivity()).setConfigAssig(position, assigment);
        }
    });

    OnClickListener searchListener = new OnClickListener() {

        public void onClick(View v) {
            LogService.log(getTag(), "Search Pressed");
        }
    };
    assigSearchIB.setOnClickListener(searchListener);

}
public void setAssigments(Assigments assigments) {
    this.assigments = assigments;
}

public void loadAssigments(Assigments assigments) {
    System.out.println("assigments"+assigments );
    this.assigments = assigments;
    listArrayAdapter = new ListArrayAdapter(ChooseAssigmentFragment.this, assigments);

    assigList.setAdapter(listArrayAdapter);
}

public void alert() {
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(true);

    dialog.show();
    dialog.dismiss();

}
@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    System.out.println("ChooseAssigmentFragment.onDestroy()");
    super.onDestroy();
}
@Override
public void onDestroyView() {
    // TODO Auto-generated method stub
    System.out.println("ChooseAssigmentFragment.onDestroyView()");
    super.onDestroyView();
}

}

次のxmlを使用:

 <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    android:id="@+id/RelativeLayoutAssig2"
    android:layout_width="match_parent"
    android:layout_height="20dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@color/SlateGray"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center"
        android:text="@string/sensor_conf" />
</RelativeLayout>



    <EditText
        android:id="@+id/AssigSearch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/RelativeLayoutAssig2"
        android:layout_toLeftOf="@+id/AssigSB"
        android:visibility="gone"
        android:ems="10" >

    </EditText>


<ListView
    android:id="@+id/assigListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/AssigSearch" >

</ListView>


<ImageButton
    android:id="@+id/AssigSB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/assigListView"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/AssigSearch"
    android:background="@color/Transparent"
    android:src="@drawable/ic_action_search"
    android:visibility="gone" />

これは私のフラグメントアクティビティです:

public class MainFragmentActivity extends MyBaseActivity implements OnClickListener {
private static final String TAG = MainFragmentActivity.class.getName();
private Fragment f;
RelativeLayout header, parentHeader;
Assigments assigments;

@Override
public void onBackPressed() {
    Class<?> previousFragment = getPreviousScreen();
    if (previousFragment != null) {
        navigateTo(previousFragment, AnimEffect.RIGHT_TO_LEFT);
    } else {
        super.onBackPressed();
    }
}

public Class<?> getPreviousScreen() {
    if ((f instanceof MainFragment) && f.isAdded()) {
        return null;
    } else if ((f instanceof ChooseAssigmentFragment) && f.isAdded()) {
        return MainFragment.class;
    }
    else if ((f instanceof ConfigFragment) && f.isAdded()) {
        return ChooseAssigmentFragment.class;
    }
    else if ((f instanceof EditNetworkFragment) && f.isAdded()) {
        return ConfigFragment.class;
    }
    return null;
}

@Override
protected void onCreate(Bundle arg0) {
    // TODO Auto-generated method stub
    super.onCreate(arg0);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.main_fragment_container);
    assigments = new Assigments();
    header = (RelativeLayout) findViewById(R.id.mainFragmentContainerheader);
    findViewById(R.id.notificationsButton).setOnClickListener(this);
    parentHeader = (RelativeLayout) findViewById(R.id.mainFragmentHeader);
    header.setOnClickListener(this);
    navigateTo(MainFragment.class, AnimEffect.BOTTOM_TO_TOP);
}

public void hideHeader() {
    parentHeader.setVisibility(View.GONE);
}

public void showHeader() {
    parentHeader.setVisibility(View.VISIBLE);
}

public void navigateTo(Class<?> fragmentClass, AnimEffect effect) {
    removeOldFragment(effect);
    try {
        f = (Fragment) fragmentClass.newInstance();
    } catch (Exception e) {
        LogService.err(TAG, e.getMessage(), e, LogService.LOG_LEVEL_LITE);
    }

    if (f != null) {
        getSupportFragmentManager().beginTransaction().disallowAddToBackStack().setCustomAnimations(AnimEffect.getInAnimation(effect), 0).add(R.id.mainFragmentContainer, f, fragmentClass.getSimpleName()).commitAllowingStateLoss();
    }
}

private void removeOldFragment(AnimEffect effect) {
    if ((f != null) && f.isAdded()) {
        System.out.println("removing:  " + f.getClass().getSimpleName());
        getSupportFragmentManager().beginTransaction().setCustomAnimations(0, AnimEffect.getOutAnimation(effect)).remove(f).commitAllowingStateLoss();
        getSupportFragmentManager().executePendingTransactions();
    }
}

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.mainFragmentContainerheader:
        if (f.getClass() != MainFragment.class) {
            navigateTo(MainFragment.class, AnimEffect.RIGHT_TO_LEFT);
        }
        break;
    case R.id.notificationsButton:
        View x =getLayoutInflater().inflate(R.layout.help_fragment, null);
        ((RelativeLayout)findViewById(R.id.mainFragmentContainerx)).addView(x, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
        Animation a=AnimationUtils.loadAnimation(this, R.anim.push_left_in);
        a.setFillAfter(true);
        x.startAnimation(a);

        break;
    default:
        break;
    }
    // TODO Auto-generated method stub

}

public void setConfigAssig(int position, Assigment assigment) {
    // TODO Auto-generated method stub
    navigateTo(ConfigFragment.class, AnimEffect.RIGHT_TO_LEFT);
    if ((f != null) && (f instanceof ConfigFragment)) {
        ((ConfigFragment) f).setAssigment(position, assigment);
    }
}

public void setConfigAssigments(Assigments assigments) {
    navigateTo(ChooseAssigmentFragment.class, AnimEffect.RIGHT_TO_LEFT);
    this.assigments = assigments;
}

public void getConfigAssigments() {
    if ((f != null) && (f instanceof ChooseAssigmentFragment)) {
        ((ChooseAssigmentFragment) f).setAssigments(assigments);
    }
}

}

ご覧のとおり、xml には AssigSearch という EditText と AssigSB という imageButton があります。問題は、フラグメントを変更すると (MainFragmentActivity からのクラス navigateTo)、editText と imagebuttons が他のページにも残ることです。この 2 つに関係するコードのすべての部分を ChooseAssigmentFragment から削除しようとしましたが、他のフラグメントにはまだ表示されています。それらを xml コードに入れて visibiliry: GONE にすると、それらは表示されません。しかし、それらは私のxmlにも表示されません。フラグメントからプログラムで可視性を設定してから、フラグメントを変更する前に Gone に変更しようとしましたが、まだ運がありません。onDestroyView および onDestroy 関数で enable(false) を呼び出そうとしましたが、まだ運がありません。他のフラグメントではなく、自分のフラグメントでこのショーを作成する方法はありますか?

4

1 に答える 1

0

このフラグメントの前のフラグメントでは、2 つのインスタンスを作成しました。1 つを削除すると、1 つが残ります。

于 2012-12-07T13:24:25.603 に答える