2012-04-18 6 views
1

私はアンドロイド開発を始めました。私は、XMLファイルを解析するためのSAXパーサーを使用してアプリケーションで作業しています。結果を取得してListViewに表示していますが、詳細ビューの値を取得できません。特定の行をクリックすると、その特定の行がDetailActivityを表示したいときと同じように。ArrayListからDetailViewを取得する方法は?

私はXMLから値を取得し、ArrayListの

ArrayListのタイトルにそれらを保存しています私のコードでは、この

onItemClick()

を使用しています=新しい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); 
     } 
    }); 

追加ホルダーのメソッドを取得

class ViewHolder 
     { 
      TextView txtViewTitle; 

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

     } 

最終的にあなたの迅速な応答のためではなくて

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

おかげBharkserようDetailsActivityで値を取得ViewHolderクラスコンパイラgiv私にエラーを表示し、提案でgetTxtViewTitle()をTextViewに変更するか、TextView txtViewTitleをString txtViewTitleに変更してください。このミスマッチ条件ではどうすればよいですか? – user755278

+0

getTxtViewTitle()の次の文を使用します。 return txtViewTitle.toString(); –

関連する問題