我目前正在制作一个Android应用程序,我想在活动和片段之间传递一个日期.我的活动有一个按钮,用于打开片段:DatePickerFragment.
在我的活动中,我显示了一个日期,我想用片段修改它.所以我想将日期传递给datepicker,然后将其发送回活动.
我尝试了很多解决方案,但都没有.简单的方法会传递一个参数,但这不能用碎片来完成.
我想将我的活动中的参数传递给嵌入到活动中的片段.片段静态嵌入xml布局中.我试着像这样调用setArgument():
setContentView(R.layout.detail_activity);
DetailFragment detailFragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detailFragment);
detailFragment.setArguments(getIntent().getExtras());
Run Code Online (Sandbox Code Playgroud)
但是已经太晚了,因为必须在片段创建后立即调用setArguments.唯一的是我看到getArguments()和更改捆绑.有更好的方法吗?
我需要将数据从活动传递到片段.我知道我可以使用bundle,但是一旦我传递数据,我就无法在不调用和再次创建片段的情况下发送数据.
在我的活动中,有些东西可能会被更改,我需要通知我的片段这些更改而不重新创建片段.
我知道这里有很多关于这方面的话题.我也多次阅读文档,但我找不到将数据从活动传递到片段的最佳方法.
我希望能够使用带选项卡的滑动视图在两个不同的布局(列表和地图)中显示我的可搜索活动的结果.我必须将2个数据传递给片段:"currentLocation"是当前用户位置,"result"是对象列表.
我已经省略了代码的某些部分,以使其更容易理解.
SearchableActivity.java
public class SearchableActivity extends ActionBarActivity implements TabListener {
List<PlaceModel> result = new ArrayList<PlaceModel>();
private SearchView mSearchView;
private String currentLocation;
AppSectionsPagerAdapter mAppSectionsPagerAdapter;
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_searchable);
final ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAppSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
actionBar.addTab(actionBar.newTab().setText("List").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("Map").setTabListener(this));
// get currentLocation here
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent); …Run Code Online (Sandbox Code Playgroud) android android-layout android-fragments android-view android-tabs
我有一个通过采用者类实例化和填充 Fragment 的活动。我想将值/对象传递给这个 Fragment 采用者类,以便我可以指定布局等。
我曾尝试使用 setArgument 方法传递包,但我的代码爆炸了,不知道为什么。据我了解,我可以在采用者类的 onCreate 方法中收集包。我看到在注释代码后立即正确设置了参数,但遗憾的是在那之后它崩溃了,我不明白为什么。如果我删除捆绑代码,它不会崩溃。:(
下面是我的代码,有人知道我应该把捆绑代码放在哪里,注释掉了吗?
public class LoginScreen extends ActionBarActivity {
private final String ARG_SELECTED_LAYOUT_ID = "selectedLayoutId";
private final int DEFAULT_LAYOUT = R.layout.layout_list;
private int mSelectedLayoutId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
mSelectedLayoutId = DEFAULT_LAYOUT;
if (savedInstanceState != null) {
mSelectedLayoutId = savedInstanceState.getInt(ARG_SELECTED_LAYOUT_ID);
}
addLayoutTab(
actionBar, R.layout.layout_list, R.drawable.ic_list, "list");
addLayoutTab(
actionBar, R.layout.layout_grid, R.drawable.ic_grid, "grid");
addLayoutTab(
actionBar, R.layout.layout_staggered_grid, R.drawable.ic_staggered, "staggered");
addLayoutTab(
actionBar, R.layout.layout_spannable_grid, R.drawable.ic_spannable, "spannable");
} …Run Code Online (Sandbox Code Playgroud) 我有两个活动。第一个是包含列表视图的普通活动,第二个是带有两个选项卡的选项卡式布局。一个是“描述”选项卡,另一个是“样本代码”选项卡。
我为每个创建了两个单独的片段,即“ OneFragment”和“ TwoFragment”。我需要的是,当用户单击我正常活动中的某个项目时,该项目将存储在字符串中,并且该字符串应传递到选项卡式布局中,并应显示在OneFragment中,即“说明”选项卡
(例)。我的列表包含{“ Android”,“ Studio”},如果用户单击Android,则此文本应传递到说明标签,并使用TextView显示该文本。请帮我。在这里,我包括我各自的代码。
NormalActivity-> ListActi.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
lv = (ListView) findViewById(R.id.listView);
final List<String> ListElementsArrayList = new ArrayList<String>(Arrays.asList(listElements));
final ArrayAdapter<String> adapter = new ArrayAdapter<String>
(getApplicationContext(), android.R.layout.simple_list_item_1, ListElementsArrayList);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Toast.makeText(getApplicationContext(), listElements[position],Toast.LENGTH_LONG).show();
s = listElements[position];
if(position == 1){
s = listElements[position];
Bundle bundle = new Bundle();
bundle.putString("ClickedItem", listElements[position]);
OneFragment fragobj = new OneFragment();
TwoFragment fag = new TwoFragment(); …Run Code Online (Sandbox Code Playgroud) java android android-intent android-fragments android-tabactivity
我在RecyclerView. 当我单击列表项启动时BottomSheetDialogFragment。
如何在 kotlin 中将列表项数据传递给 BottomSheetDialogFragment
BottomSheetFragment().show(context!!.supportFragmentManager, "BottomSheetFragment")
class BottomSheetFragment() : BottomSheetDialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
var view = inflater.inflate(R.layout.coin_detail_lauout, container, false)
return view
}
}
Run Code Online (Sandbox Code Playgroud) 我研究了很多,但没有找到解决方案.
这是我的活动:
public class ProfileActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
//region FindViews
toolbar = (Toolbar) findViewById(R.id.toolbar);
viewPager = (ViewPager) findViewById(R.id.viewpager);
tabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs);
//endregion
//region ViewPager
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setupViewPager(viewPager);
viewPager.setOffscreenPageLimit(5);
// tabLayout.setupWithViewPager(viewPager);
tabLayout.setViewPager(viewPager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
switch (position) {
case 0:
changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_red_primary));
break;
case 1:
changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_yellow_primary));
break;
case 2:
changeColor(ContextCompat.getColor(getApplicationContext(), R.color.theme_green_primary));
break;
case 3: …Run Code Online (Sandbox Code Playgroud) 活动:
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
Log.v("Test", "Menjalankan intent antar activity ke fragment");
Bundle bundle=new Bundle();
//String message= "From activity";
int nilai=10;
bundle.putInt("Nilai", nilai);
Log.v("Testing", "Data yang akan dikirim "+nilai);
//set Fragmentclass Arguments
Lirik f=new Lirik();
f.setArguments(bundle);
viewPager.setCurrentItem(tab.getPosition());
}
Run Code Online (Sandbox Code Playgroud)
片段代码:
package com.example.egmim;
import com.example.support.dbAdapter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Lirik extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle …Run Code Online (Sandbox Code Playgroud) 我想用我制作的Parcelable类将数据发送到Fragment.
我知道这是你在使用Activity时所做的事情(ObjectA是扩展Parcelable的类):
ObjectA obj = new ObjectA();
// Set values etc.
Intent i = new Intent(this, MyActivity.class);
i.putExtra("com.package.ObjectA", obj);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
但由于你不能使用碎片的意图,我不知道如何做到这一点.
我甚至可以使用Parcelable类吗?如果没有,我应该使用什么?我有可能,怎么样?
编辑/更新:
我已经更新了你的建议,但仍然没有得到一切.
这是我们用来创建列表视图的片段:
package com.tsjd.HotMeals;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.example.tabtest.R;
public class RecipeListViewFragment extends Fragment {
ArrayList<String> titles;
ArrayList<String> descriptions;
ArrayList<String> images;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RecipeListViewParcer object = getArguments().getParcelable("extraObject");
titles = object.getTitles();
descriptions = object.getDescriptions();
images = object.getImages();
}
@Override
public View onCreateView(LayoutInflater …Run Code Online (Sandbox Code Playgroud) 喜欢这个从片段到活动的良好运作.
Intent intent = new Intent(Location.this,MessageActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud) 我在我的活动中设置了一个片段,但我想知道如何将活动中的数据传递到片段中?
例如,这是我的代码:
public class MyFragment extends Fragment
{
private MyData _myData;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Inflate the layout for this fragment
return inflater.inflate(R.layout.custom_fragment, container, false);
MyActivity activity = (MyActivity) getActivity(); // Unreachable code error here
_myData = activity.getMyData();
}
}
Run Code Online (Sandbox Code Playgroud)
我需要能够访问MyData片段中对象的内容.但是,当我尝试上面的代码时,我得到一个"无法访问的代码"错误,即使getMyData()是类中的公共方法MyActivity.
android ×12
java ×3
fragment ×2
android-tabs ×1
android-view ×1
bundle ×1
kotlin ×1
parcelable ×1