gpt4 book ai didi

java - 在初始化它的其他方法中折叠工具栏的setTitle

转载 作者:行者123 更新时间:2023-11-29 23:38:56 26 4
gpt4 key购买 nike

在我的 Fragment 中有一个 CollapsingToolbar,它是在 onCreateView() 方法中创建的:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) getActivity().findViewById(R.id.toolbar_layout);
AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.appBar);

return view;
}

由于我的标题可以在其他方法中更改,我尝试创建一个新方法来设置 CollapsingToolbar 的新标题,但它说 cannot resolve symbol 'collapsingToolbarLayout'。我这样试过:

public void setTitle(String passedTitle){
collapsingToolbarLayout.setTitle(passedTitle);
}

我必须更改什么才能通过其他方法重命名标题?

编辑:

这是我使用 setTitle() 方法的类。我尝试从内部类中使用它,我尝试尽可能地削减它:

public class CallsFragment extends Fragment {

String title;
private CollapsingToolbarLayout collapsingToolbarLayout;

public CallsFragment() {
// Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_calls, container, false);

collapsingToolbarLayout = (CollapsingToolbarLayout) getActivity().findViewById(R.id.toolbar_layout);
AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.appBar);

return view;
}


public void setTitle(String passedTitle){
collapsingToolbarLayout.setTitle(passedTitle);
}


public class GetContacts extends AsyncTask<Void, Void, Void> {

@Override
protected void onPreExecute() {
super.onPreExecute();

}

@Override
protected Void doInBackground(Void... arg0) {

}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);

//here the title string gets filled
Log.d("place", title);
setTitle(title);
}
}

和 MainActivity:

public class MainActivity extends AppCompatActivity implements Serializable {

private ViewPager viewPager;
BottomNavigationView bottomNavigationView;
ChatFragment chatFragment;
CallsFragment callsFragment;
ContactsFragment contactsFragment;
MenuItem prevMenuItem;

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

//Initializing viewPager
viewPager = (ViewPager) findViewById(R.id.viewpager);

//Initializing the bottomNavigationView
bottomNavigationView = (BottomNavigationView)findViewById(R.id.bottom_navigation);

bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_umkreis:
viewPager.setCurrentItem(0);
break;
case R.id.navigation_karte:
viewPager.setCurrentItem(1);
break;
case R.id.navigation_einstellungen:
viewPager.setCurrentItem(2);
break;
}
return false;
}
});


viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
if (prevMenuItem != null) {
prevMenuItem.setChecked(false);
}
else
{
bottomNavigationView.getMenu().getItem(0).setChecked(false);
}
Log.d("page", "onPageSelected: "+position);
bottomNavigationView.getMenu().getItem(position).setChecked(true);
prevMenuItem = bottomNavigationView.getMenu().getItem(position);

}

@Override
public void onPageScrollStateChanged(int state) {

}
});


setupViewPager(viewPager);
}

private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
callsFragment = new CallsFragment();
chatFragment = new ChatFragment();
contactsFragment = new ContactsFragment();
adapter.addFragment(callsFragment);
adapter.addFragment(chatFragment);
adapter.addFragment(contactsFragment);
viewPager.setAdapter(adapter);
int limit = adapter.getCount();
viewPager.setOffscreenPageLimit(limit);
}

最佳答案

根本原因: 因为 collapsingToolbarLayout 变量在 onCreate 方法中是局部的,所以 setTitle 无法访问它.

解决方案:将 collapsingToolbarLayout 作为 Fragment 的变量。

private CollapsingToolbarLayout collapsingToolbarLayout;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

collapsingToolbarLayout = (CollapsingToolbarLayout) getActivity().findViewById(R.id.toolbar_layout);
AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.appBar);

return view;
}

public void setTitle(String passedTitle){
collapsingToolbarLayout.setTitle(passedTitle);
}

更新:我看到了问题,更改CallsFragment

中的代码

来自

collapsingToolbarLayout = (CollapsingToolbarLayout) getActivity().findViewById(R.id.toolbar_layout);
AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.appBar);

collapsingToolbarLayout = (CollapsingToolbarLayout) view.findViewById(R.id.toolbar_layout);
AppBarLayout appBarLayout = (AppBarLayout) view.findViewById(R.id.appBar);

注意:当您想要从包含您可以使用的当前 fragment 的 Activity 访问 View 时。

View view = getActivity().findViewById(R.id.this_view_inside_activity);

如果您想访问 fragment 内的 View ,请使用。

// Inflate the layout for this fragment
View fragmentRootView = inflater.inflate(R.layout.fragment_calls, container, false);
View view = fragmentRootView.findViewById(R.id.this_view_inside_fragment);

关于java - 在初始化它的其他方法中折叠工具栏的setTitle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52025606/

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