[英]Setting OnItemClick to open URL in webview for rss feed
我知道我已經過分考慮或思考過,但是我似乎無法弄清楚用戶單擊它時如何啟動rss feed的鏈接。 我正在使用DOM解析器將xml文件解析為列表視圖,並從xml文件中獲取所有信息。 我遇到的問題是將其解析為我具有的Custom WebActivity,它應該也加載我擁有的webview客戶端。 這是我正在使用的代碼。
主要活動
public class CustomizedListView extends Activity {
// All static variables
static final String URL = "http://treymorgan.net/feed";
// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_ID = "id";
static final String KEY_TITLE = "title";
static final String KEY_PUB_DATE = "pubDate";
static final String KEY_LINK = "guid";
ListView list;
LazyAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML from URL
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_ID, parser.getValue(e, KEY_ID));
map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
map.put(KEY_PUB_DATE, parser.getValue(e, KEY_PUB_DATE));
map.put(KEY_LINK, parser.getValue(e, KEY_LINK));
// adding HashList to ArrayList
songsList.add(map);
}
list=(ListView)findViewById(R.id.list);
// Getting adapter by passing xml data ArrayList
adapter=new LazyAdapter(this, songsList);
list.setAdapter(adapter);
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
編輯:這是我遇到問題的代碼部分... onItemClick方法將rss feed中的url發送到webview活動,以便可以在應用程序中查看而不是通過設備上的本機瀏覽器查看
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(CustomizedListView.this, WebviewActivity.class);
Bundle b = new Bundle();
intent.putExtra("KEY_LINK", b);
startActivity(intent);
}
});
}
}
這是我的Webview活動
public class WebviewActivity extends Activity{
private WebView webview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
Bundle b = getIntent().getExtras();
String KEY_LINK = b.getString("KEY_LINK");
webview = (WebView) findViewById(R.id.webView1);
webview.setWebViewClient(new MyWebViewClient(this));
webview.getSettings().setAppCacheEnabled(false);
webview.getSettings().setBuiltInZoomControls(true);
webview.setInitialScale(1);
webview.loadUrl(KEY_LINK);
}
}
因此,從根本上講,我想要做的是將KEY_GUID字符串連接到WebviewActivity,而我似乎無法弄清楚如何將字符串從一個活動獲取到另一個活動。 預先感謝您的任何幫助
編輯:好的,我已經做了一段時間,並且我更新了我正在使用的代碼,以解決此問題。 現在,我沒有任何錯誤,當我單擊一個項目時,它將打開WebviewActivity,但它不會加載網站,也不會將我的Webview客戶端附加到該網站上。 誰能幫我解決這個問題?
編輯:當我加載這樣的代碼時:
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(CustomizedListView.this, WebviewActivity.class);
Bundle b = new Bundle();
intent.putExtra("b", "http://www.google.com" );
startActivity(intent);
它會打開webview活動並加載google。 因此,也許我現在遇到的問題是如何從DOM解析器中獲取所需的鏈接。 有人有想法么?
在您的通話活動中:
Intent i = new Intent(this, WebActivity.class);
i.putExtra(MY_KEY, "http://http://stackoverflow.com");
startActivity(i);
在您的接收活動中:
protected void onStart() {
super.onStart();
String myUrl = getExtras().getString(MY_KEY);
webView.loadUrl(myUrl);
}
編輯:
假設您的適配器包含HashMaps(根據我對您如何解析XML的了解)
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
HashMap<String, String> selectedSong = (HashMap<String, String>) parent.getItemAtPosition(position);
Intent intent = new Intent(CustomizedListView.this, WebviewActivity.class);
intent.putExtra("KEY_LINK", selectedSong.get(KEY_LINK));
startActivity(intent);
}
對於從一個活動到另一個活動的傳遞字符串
第一次活動:
Intent indisplay = new Intent(FirstClass.this,SecondClass.class);
indisplay.putExtra("link",your link here);
startActivity(indisplay);
第二項活動:
Intent indispaly = getIntent();
String url = indispaly.getStringExtra("link");
// your link from previous activity is stored into the url
並顯示到webview中 ,例如:
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.newsdisplay);
getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
Intent indispaly = getIntent();
String url = indispaly.getStringExtra("link");
newswebview = (WebView) findViewById(R.id.news_webView);
newswebview.setWebViewClient(new WebViewClient());
WebSettings webSettings = newswebview.getSettings();
webSettings.setJavaScriptEnabled(true);
newswebview.getSettings().setSupportZoom(true); //Zoom Control on web (You don't need this
//if ROM supports Multi-Touch
newswebview.getSettings().setBuiltInZoomControls(true); //Enable Multitouch if supported by ROM
newswebview.loadUrl(url);
final Activity MyActivity = this;
newswebview.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress)
{
//Make the bar disappear after URL is loaded, and changes string to Loading...
MyActivity.setTitle(" Loading...");
MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded
// Return the app name after finish loading
if(progress == 100){
MyActivity.setTitle(R.string.app_name);
}
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK) && newswebview.canGoBack()) {
newswebview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
好的,這是我提出的問題的答案。 這對我來說非常有效,並且完全按照我的意願進行。 這是它的工作代碼
public class CustomizedListView extends Activity {
// All static variables
static final String URL = "http://treymorgan.net/feed";
// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_ID = "id";
static final String KEY_TITLE = "title";
static final String KEY_PUB_DATE = "pubDate";
static final String KEY_LINK = "link";
ListView list;
LazyAdapter adapter;
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML from URL
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_ID, parser.getValue(e, KEY_ITEM));
map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
map.put(KEY_PUB_DATE, parser.getValue(e, KEY_PUB_DATE));
map.put(KEY_LINK, parser.getValue(e, KEY_LINK));
// adding HashList to ArrayList
songsList.add(map);
}
list=(ListView)findViewById(R.id.list);
// Getting adapter by passing xml data ArrayList
adapter=new LazyAdapter(this, songsList);
list.setAdapter(adapter);
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(CustomizedListView.this, WebviewActivity.class);
new Bundle();
intent.putExtra( "b", songsList.get(position).get(KEY_LINK));
startActivity(intent);
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.