是一个网页阅读器的软件,tabhost里选择了一个标题后,会跳转到另一个tab并显示内容,但是现在的问题是,当选择完一个标题以后再返回选择其他标题的时候,全文的内容的并不会随之更新,内容仍停留在上一个选择的标题内容上,请问如何解决?如下是tabsactivity.java的代码,如需要全部的工程文件,链接里可以下载。http://u.115.com/file/aqkild0i#RSSTest.rar
package com.fit.ui;import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;import com.fit.bean.News;
import com.fit.util.XMLPull;
import android.app.TabActivity;
import android.content.Intent;
import android.database.DataSetObserver;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;public class TabsActivity extends TabActivity implements TabHost.TabContentFactory{
private List<News> list;
private TabHost tabHost;
private News thisnews=null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tabHost=this.getTabHost();
tabHost.addTab(tabHost.newTabSpec("t1")
.setIndicator("主页",getResources().getDrawable(R.drawable.desktop_icon_03))
.setContent(this));
tabHost.addTab(tabHost.newTabSpec("t2")
.setIndicator("概要介绍",getResources().getDrawable(R.drawable.desktop_icon_03))
.setContent(this));
tabHost.setEnabled(false);
tabHost.setCurrentTabByTag("t1");
try {
list=XMLPull.getNewsFromURL(new URL(getIntent().getStringExtra("url")));
Log.e("========>", list.size()+"");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public View createTabContent(String tag) {
if(tag.equals("t1")){
return getListView();
}else{
return getView();
}
}
private View getView(){
LayoutInflater inflater=LayoutInflater.from(this);
LinearLayout layout=(LinearLayout) inflater.inflate(R.layout.data, null);
layout.postInvalidate();
TextView txtTitle=(TextView) layout.findViewById(R.id.txtTitle);
txtTitle.setText(thisnews.getTitle());
WebView wbvDetail=(WebView) layout.findViewById(R.id.wbvDetail);
wbvDetail.loadDataWithBaseURL(null, thisnews.getDescription(), null, "UTF-8", null);
Button btnDetail=(Button) layout.findViewById(R.id.btnDetail);
btnDetail.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(thisnews.getLink()));
startActivity(intent);
}
});
Button btnBack=(Button) layout.findViewById(R.id.btnBack);
btnBack.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
tabHost.setCurrentTabByTag("t1");
}
});
layout.postInvalidate();
return layout;
} private ListView getListView() {
ListView listView=new ListView(this);
listView.setAdapter(new ListAdapter() {

@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub

}

@Override
public void registerDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub

}

@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}

@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 1;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
final News news=(News) list.get(position);
TextView text=new TextView(TabsActivity.this);
text.setBackgroundColor(Color.CYAN);
text.setText(news.getTitle());
text.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

thisnews=news;
tabHost.setCurrentTabByTag("t2");
Log.e("============>", thisnews.getLink());
}
});
return text;
}

@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
return 0;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return list==null?0:list.size();
}

@Override
public boolean isEnabled(int position) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean areAllItemsEnabled() {
// TODO Auto-generated method stub
return false;
}
});
return listView;
}

}

解决方案 »

  1.   

    你可以自己定义一个tab条,做成按钮就可以了
      

  2.   

    以下言论为个人推测,未经测试,仅供参考~~
    看了下android文档:
    TabSpec的方法setContent(Intent intent)
    Specify an intent to use to launch an activity as the tab content.(指定一个意图作为tab的内容登录一个activity)
    楼主两次setContent(this)的参数都为this,切换后是同一个intent所以内容没变化
    可尝试将其中一个this换为另一个activity
      

  3.   

    同求啊。。帮lz顶 我尝试过设置tab监听setOnTabChangedListener 但貌似我的程序逻辑错误。。点第二个tab出现的前一次点的tab的内容 也就是说先 先跳转才能的到该tab的Id 纠结啊。。
      

  4.   

    可以试着用ActivityGroup去替代TabHost嘛?如果可以你可以试试,个人觉得TabHost没有ActivityGroup好使