2012-04-18 111 views
1

我是新来的android开发。我正在使用SAX解析器解析XML文件的应用程序,我得到的结果并在ListView上显示它们,但我无法获取详细视图的值。就像我想在用户点击特定行时那么该特定行显示DetailActivity。如何从ArrayList中获取DetailView的值?

我使用这个

onItemClick()

在我的代码我越来越从XML值,并将其保存在ArrayList中

ArrayList的标题= new ArrayList();

能够在ListView中显示该标题,但是如何在DetailView中显示相同的标题。

这里是我下面的代码: -

MainActivity.java

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 

    static final String URL = "http://www.xyz.com/api.php?page_id=1"; 

    ItemList itemList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     XMLParser parser = new XMLParser(); 
     String XML = parser.getXmlFromUrl(URL); 

     System.out.println("This XML is ========>"+XML); 

     try 
     { 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      XMLReader xr = sp.getXMLReader(); 

      /** Create handler to handle XML Tags (extends DefaultHandler) */ 
      MyXMLHandler myXMLHandler = new MyXMLHandler(); 
      xr.setContentHandler(myXMLHandler); 

      ByteArrayInputStream is = new ByteArrayInputStream(XML.getBytes()); 
      xr.parse(new InputSource(is)); 
     } 
     catch(Exception e) 
     { 

     } 

     itemList = MyXMLHandler.itemList; 

     ArrayList<String> listItem= itemList.getTitle(); 

    System.out.println("(ListItem)=======>"+listItem); 


    ListView lview = (ListView) findViewById(R.id.listview1); 
    myAdapter adapter = new myAdapter(this, listItem); 
    lview.setAdapter(adapter); 


    lview.setOnItemClickListener(new OnItemClickListener() 
    { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 


      // Starting new intent 
      Intent in = new Intent(MainActivity.this, DetailClassJI.class); 


      myAdapter ma = (myAdapter)parent.getAdapter(); 



     startActivity(in); 
     } 
    }); 
    } 
} 

ItemList.java

public class ItemList 
{ 
    ArrayList<String> title = new ArrayList<String>(); 


    public ArrayList<String> getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title.add(title); 
    } 

} 

XMLParser.java(在我所作的HTTPRequest只)

public class XMLParser { 

    // constructor 
    public XMLParser() { 

    } 

    /** 
    * Getting XML from URL making HTTP request 
    * @param url string 
    * */ 
    public String getXmlFromUrl(String url) { 
     String xml = null; 

     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      xml = EntityUtils.toString(httpEntity); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     // return XML 
     return xml; 
    } 
} 

XMLHandler.java

public class MyXMLHandler extends DefaultHandler 
{ 
    public static ItemList itemList; 
    public boolean current = false; 
    public String currentValue = null; 

    @Override 
    public void startElement(String uri, String localName, String qName, 
      Attributes attributes) throws SAXException { 
     // TODO Auto-generated method stub 

     current = true; 

     if (localName.equals("posts")) 
     { 
      /** Start */ 
      itemList = new ItemList(); 

     } 
    } 

    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException { 
     // TODO Auto-generated method stub 
     current = false; 

     if(localName.equals("title")) 
     { 
      itemList.setTitle(currentValue); 
     } 
    } 

    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException { 
     // TODO Auto-generated method stub 

     if(current) 
     { 
      currentValue = new String(ch, start, length); 
      current=false; 
     } 
    } 
} 

myAdapter.java

public class myAdapter extends BaseAdapter 
{ 
    ArrayList<String> listTitle; 


    Activity activity; 

    public myAdapter(Activity activity, ArrayList<String> listTitle) { 
     super(); 
     this.listTitle = listTitle; 


     this.activity = activity; 
    } 

    public int getCount() { 
     // TODO Auto-generated method stub 
     return listTitle.size(); 
    } 

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

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

    private class ViewHolder 
    { 
     TextView txtViewTitle; 

    } 

    public View getView(int position, View view, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     ViewHolder title; 
     LayoutInflater inflater = activity.getLayoutInflater(); 

     if(view==null) 
     { 
      view = inflater.inflate(R.layout.lview_row, null); 
      title = new ViewHolder(); 

      title.txtViewTitle = (TextView) view.findViewById(R.id.txtItem); 

      view.setTag(title); 
     } 
     else 
     { 
      title = (ViewHolder) view.getTag(); 
     } 

     title.txtViewTitle.setText(listTitle.get(position)); 


     return view; 
    } 
} 

DetailClassJi.java

public class DetailClassJI extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.detail); 

    // getting intent data 
     Intent in = getIntent(); 


    // Displaying all values on the screen 
     TextView lblName = (TextView) findViewById(R.id.txtItem); 

    } 
} 

谁能请sugget我怎么就能够还显示标题的详细视图。 由于提前

回答

0

做改变,我希望它会工作如下..

添加以下语句getView(...)

title.txtViewTitle.setText(listTitle.get(position)); 
title.setTxtViewTitle(listTitle.get(position)); 

变化OnItemClickListener

lview.setOnItemClickListener(new OnItemClickListener() 
    { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 


      ViewHolder holder = (ViewHolder) view.getTag(); 



      // Starting new intent 
      Intent in = new Intent(MainActivity.this, DetailClassJI.class); 
      in.putExtra("title", holder.getTxtViewTitle()); 
       startActivity(intent); 

      myAdapter ma = (myAdapter)parent.getAdapter(); 



     startActivity(in); 
     } 
    }); 

附加GET方法在View架

class ViewHolder 
     { 
      TextView txtViewTitle; 

       public String getTxtViewTitle(){ 
        return txtViewTitle; 
      } 
      public void setTxtViewTitle(String txtViewTitle){ 
        this.txtViewTitle = txtViewTitle; 
      } 

     } 

终于得到价值DetailsActivity像

getIntent().getExtras().getString("title") 
+0

感谢Bharkser您的快速答复,但在ViewHolder类编译器giv给我错误,并在建议中显示将getTxtViewTitle()更改为TextView或将TextView txtViewTitle更改为String txtViewTitle。我应该在这种错配情况下做些什么。 – user755278 2012-04-18 07:58:56

+0

在getTxtViewTitle()中使用以下语句。返回txtViewTitle.toString(); – 2012-04-18 09:10:26

相关问题