我有一个Activity和3个片段。在主要活动的底部,我有3个用于切换活动片段的按钮。每个片段都包含一个ListView,您认为是一种很好的开发方式吗?我开发了第一个从服务器下载json的片段,解析并将元素添加到ListView,但是当我按下按钮切换到Fragment2时,第一个片段就停留了。
这是主要的活动,带有listView的Fragment在一些TextView和一个ImageView中使用自定义适配器。如果我删除listView,片段会毫无问题地改变。
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
public class Home extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_home);
}
public void selectFrag(View view) {
Fragment fr;
int stringTitleID = R.string.title_fragment1;
if(view == findViewById(R.id.imgBtn3))
{
fr = new FragmentThree();
stringTitleID = R.string.title_fragment3;
}
else if(view == findViewById(R.id.imgBtn2))
{
fr = new FragmentTwo();
stringTitleID = R.string.title_fragment2;
}
else
{
fr = new FragmentOne();
stringTitleID = R.string.title_fragment1;
}
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.commit();
// I change the title in the top_bar
TextView textViewActivityTitle = (TextView) findViewById(R.id.textViewActivityTitle);
textViewActivityTitle.setText(getResources().getString(stringTitleID).toString());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.home, menu);
return true;
}
/*
* This functions clears the app cache. The json responses are stored in che cacheDir or cacheExternalDir.
* I clean them when the app is started. I only use the cache between the Fragments
*/
}
片段解决方案是好的吗?为什么带有listview的片段会保留? 我应该使用ListFragment吗?
非常感谢。
答案 0 :(得分:0)
我认为Tab导航更好,但你可以试试这个:
1)在您的主要活动中首先将点击监听器添加到您的按钮,然后使用参数进行区分:
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
changeFragment(1)
}
};
public void changeFragment(int whichfragment){
switch(whichfragment){
case 1:
fr=new FragmentOne();
replaceFragment();
break;
case 2:
fr=new FragmentTwo();
replaceFragment();
break;
}
}
2)现在你可以替换你的片段
public void replaceFragment(){
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction=fragmentManager.beginTransaction();
transaction.replace(R.id.fragment_place, fr);
transaction.commit();
}