1

私はAndroid開発に不慣れです。XMLファイルの解析にSAXパーサーを使用して結果を取得し、それらをListViewに表示するアプリに取り組んでいますが、詳細ビューの値を取得できません。ユーザーが特定の行をクリックすると、その特定の行にDetailActivityが表示されます。

私はこれを使用しています

onItemClick()

私のコードでは、XMLから値を取得し、それらをArrayListに保存しています。

ArrayList title = 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);

    }
}

詳細ビューでもタイトルを表示する方法を教えてください。前もって感謝します

4

2 に答える 2

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メソッドを追加

 class ViewHolder
        {
            TextView txtViewTitle;

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

        }

最終的に次のようなDetailsActivityで値を取得します

getIntent().getExtras().getString("title")
于 2012-04-18T06:43:35.383 に答える
0

http://www.java2s.com/Open-Source/Android/UnTagged/feemaster/com/fee/master/ui/DetailView.java.htm

お役に立てれば...

于 2012-04-18T06:31:29.400 に答える