【问题标题】:Setting OnItemClick to open URL in webview for rss feed设置 OnItemClick 以在 web 视图中打开 rss 提要的 URL
【发布时间】:2012-10-04 22:39:08
【问题描述】:

我知道我在看这个或想这个,但我似乎无法弄清楚当用户点击它时如何启动 rss 提要的链接。我正在使用 DOM Parser 将 xml 文件解析为 listview 并从 xml 文件中获取所有信息。我遇到的问题是将它解析为我拥有的自定义 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 方法将 url 从 rss 提要发送到 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 活动并很好地加载谷歌。所以也许我现在遇到的问题是如何从我的 DOM 解析器中获取我需要的链接。有人有想法么?

【问题讨论】:

  • 变量 KEY_LINK 是否得到你传递的值?
  • 它应该得到值 yes 除非我忘记了让它得到它的东西

标签: android listview rss xml-parsing


【解决方案1】:

对于从一个活动到另一个活动的传递字符串

第一个活动:

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);  
    }   

【讨论】:

  • 感谢您的回复,我会尝试一下,但是我认为当您发布此内容时,我正在编辑我的原始问题以更好地指定我需要什么,您认为这是在我刚刚对问题进行编辑后仍然可以使用
【解决方案2】:

在您的通话活动中:

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);
}

编辑:

假设您的适配器包含 HashMap(根据我对您如何解析 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); 
}

【讨论】:

  • 对 url 进行硬编码对此没有任何帮助,因为 url 是从 xml 文件中提取的,所以我没有要硬编码的 url。我需要它来检查 xml 文件并获取 url 并将其串入下一个类
  • 我是否需要更改 webview 类中的任何内容
  • 你至少试过了吗?这是我对该答案的最后一次编辑,您必须付出一些努力。不要指望别人为你编写代码。
  • 我要试一试,我现在在工作,还没到电脑前,我只是问,今晚我会知道它是否有效
【解决方案3】:

好的,这是我提出的问题的答案。这对我很有用,并且完全按照我的意愿进行。这是它的工作代码

 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); 



             }

    });
}   
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-13
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多