gpt4 book ai didi

java - Android - 您能解释一下为什么可以删除代码吗?

转载 作者:行者123 更新时间:2023-12-01 11:10:17 25 4
gpt4 key购买 nike

我正在制作一个关于 Android 的在线视频诅咒。

我有一个项目列表,当我单击列表项目时,会打开一个新 Activity 来显示该项目的详细信息。问题是我在详细 Activity 上收到双文本,我尝试修复它,然后我发现如果删除 DetailsActivity#onCreate() 上的代码

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.details_fragment, new DetailsActivityFragment())
.commit();
}

详细 Activity 显示良好。

这里是DetailsActivity的照片和代码(在不同类中使用 fragment )

主要 Activity

main activity

详细 Activity

Details Activity

但是,如果我注释掉下面在 DetailsActivity#onCreate() 中提到的代码部分,则详细 Activity 看起来不错:

注释掉代码后

after comment out the code

详细信息Activity.java:

import android...//all the need package here don't worry about

public class DetailsActivity extends ActionBarActivity {

private Intent shareIntent;

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

//Create my Share Intent (for share options in action bar)
shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
shareIntent.putExtra(Intent.EXTRA_TEXT, "My whether data");
shareIntent.setType("text/plain");

/* IF I COMMENT THIS if CODE details showed fine. No double text */
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.details_fragment, new DetailsActivityFragment())
.commit();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_details, menu);

//Locate MenuItem with ShareActionProvider OR find the MenuItem that we know has the ShareActionProvider
MenuItem shareItem = menu.findItem(R.id.action_share_item);

// Fetch and Store ShareActionProvider
ShareActionProvider MyShareProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);

if(MyShareProvider != null){
MyShareProvider.setShareIntent(shareIntent);
Log.d(DetailsActivity.class.getSimpleName(), "INTO share Provider--" + MyShareProvider.toString());
}
else{
Log.d(DetailsActivity.class.getSimpleName(), "NO share Provider");
}

return true;
}

....other code...
}

我已经在另一个类中实现了该 fragment

public class DetailsActivityFragment extends Fragment {

public DetailsActivityFragment() {}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//get the view of fragment's layout
View rootView = inflater.inflate(R.layout.fragment_details, container, false);

//get Extras form intent
Bundle DataFromIntent = getActivity().getIntent().getExtras();

//get specific data as String.
String weatherDataDetails = DataFromIntent.getString("weatherDataDetails");

//get text view from layout (rootview) and set test on it the above data (whetherData)
((TextView) rootView.findViewById(R.id.details_textview)).setText(weatherDataDetails);

return rootView;

}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
}

我的布局(主+ fragment )

activity_details.xml(主要)

<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/details_fragment"
android:name="com.example.android.sunshine.app.DetailsActivityFragment"
tools:layout="@layout/fragment_details"
android:layout_width="match_parent"
android:layout_height="match_parent" />

和fragment_details.xml

<RelativeLayout
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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.android.sunshine.app.DetailsActivityFragment">

<TextView
android:text="---null---"
android:id = "@+id/details_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</RelativeLayout>

最佳答案

您可以看到它使用了 <fragment>在这里标记

<fragment>标签,该 fragment 在创建布局时自动附加。 IE。这几乎就像下面的代码会自动为您运行

        if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.details_fragment, new DetailsActivityFragment())
.commit();
}

因此,如果您自己运行代码,就像创建另一个 fragment 并将其放在同一位置一样。这应该就是你看到这种奇怪行为的原因。

编辑:一般来说,我们通过以下两种方式之一处理 fragment

  1. 定义于 <fragment>标记并且不要使用 FragmentManager 来管理它之后在代码中。
  2. 我们声明一个容器,通常是一个空的 <FrameLayout>并且我们像上面的代码一样使用FragmentManager来在代码中对其进行管理。

附注当然还有其他情况你使用ViewPager等,但是稍后你会知道什么时候需要它。

引用:

使用<fragment>标签 http://developer.android.com/training/basics/fragments/creating.html

使用容器 http://developer.android.com/training/basics/fragments/fragment-ui.html

关于java - Android - 您能解释一下为什么可以删除代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com