-1

Android 用のシンプルな TV ガイドを作成しようとしています。そのために、あるサイトの RSS を使用しています。私は XML を解析しましたが、それを表示したいと思います。アイデアは、ステーション、現在の番組と日付を表示するリストです。リスト内の項目を押すと、テレビ局の完全なスケジュールを示す新しいアクティビティが表示されます。私はテレビ番組全体の一部を別々の文字列 (06:00 ニュース、07:15 映画など) に分けることができました。そして、文字列[][]を埋めるようにそれを分離することさえできました(|06|、|00|、|ニュース|、|07|、|15|、|映画|など)。そして、どれが最もリアルタイムに近いかを調べて表示するというのが私の考えでした。

さて、現在、私のアプリにはテレビ局、番組全体(スケジュール)、および日付が表示されています。そして、現在表示されているものだけを表示したい。誰でもこれで私を助けることができますか?

ここに私がそれをしたいクラスがあります:(ボタンとXMLのURLだけを持つパーサークラスとメインクラスもあります)

public class Pomocna extends ListActivity {

// All static variables
static String url =null;

// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_TITLE = "title";
static final String KEY_DATE = "pubDate";
static final String KEY_DESC = "encoded";

Calendar calendar = new GregorianCalendar();
int DSQ=calendar.get(Calendar.HOUR_OF_DAY);
int DMQ=calendar.get(Calendar.MINUTE);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent in = getIntent();

    // Get XML values from previous intent
    url = in.getStringExtra("A");


    ArrayList<HashMap<String,String>> menuItems = new ArrayList<HashMap<String,String>>();
    //ArrayList<String[][]> nekaj = new ArrayList<String[][]>();


    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(url); //get XML
    Document doc = parser.getDomElement(xml); // get DOM elem.
    //doc.getDocumentElement().normalize();

    NodeList nl = doc.getElementsByTagName(KEY_ITEM);

    //loop
    for (int i=0; i< nl.getLength(); i++){
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);

        //add to map
        map.put(KEY_TITLE, Vracanje1(parser.getValue(e, KEY_TITLE)));
        map.put(KEY_DATE, Vracanje2(parser.getValue(e, KEY_DATE)));
        map.put(KEY_DESC, parser.getValue3(e,KEY_DESC));

        //NEKO FRCERANJE -=- POCETAK

        String pvp = parser.getValue3(e,KEY_DESC);
        char[] rast = pvp.toCharArray();
        int brojac = 0;
        for(int q=0; q<pvp.length(); q++){
            if(rast[q]=='*') brojac++;
        }

        String[][] niz= new String[brojac][3];

        int bf1=0;
        int bf3=0;

        int oo=0;
        for(int q=0; q<pvp.length(); q++){
            if(rast[q]=='*'){
                bf3=bf1;
                bf1=q;

                String lol = pvp.substring(bf3, bf1);

                // SEPARATE STRING: LOL
                // IT MUST HAVE 3 PARTS: HOUR, MINUTE, AND DESCRIPTION

                if(oo==0){
                    String ps=lol.substring(0,2);
                    String ds=lol.substring(3,5);
                    String ts=lol.substring(6,lol.length());

                    niz[oo][0]=ps;
                    niz[oo][1]=ds;
                    niz[oo][2]=ts;  
                }
                if(oo>0){
                    String ps=lol.substring(1,3);
                    String ds=lol.substring(4,6);
                    String ts=lol.substring(7,lol.length());

                    niz[oo][0]=ps;
                    niz[oo][1]=ds;
                    niz[oo][2]=ts;
                }
                oo++;
            }
        }

        //NEKO FRCERANJE -=- KRAJ

        menuItems.add(map);
        //nekaj.add(niz);
    }


    //DISPLAY WHAT's CURRENTLY ON PROGRAM
    //USE TIME TO COMPARE AND SHOW



    ListAdapter adapter = new SimpleAdapter(this, menuItems, R.layout.list_item,
            new String[]{KEY_TITLE, KEY_DESC, KEY_DATE}, new int[]{
            R.id.title, R.id.description, R.id.date
    });
    setListAdapter(adapter);

    //singleView
    ListView lv = getListView();

}

public String Vracanje1(String bq){
    int p1=bq.length();
    int p2=p1-10;
    StringBuilder sbp= new StringBuilder(bq);
    sbp.delete(p2, p1);
    String ses=sbp.toString();

    return ses;
}
public String Vracanje2(String bq){
    int p1=bq.length();
    int p2=p1-14;
    StringBuilder sbp=new StringBuilder(bq);
    sbp.delete(p2, p1);
    String ses = sbp.toString();

    return ses;
}

}
4

2 に答える 2

0

@sandstarに同意しますが、データをフィルタリングする方法なのか、データを表示する方法なのかわかりません。この場合、それはを更新する問題ですListAdapter。つまり、最新のプログラムのみを表示する場合は、最新の番組のデータを含むマップのみを含むマップのリストをアダプターに提供する必要があります。これは、アダプタをに適用する前にデータをフィルタリング ListViewする必要があることを意味します。アダプターをより詳細に制御したい場合は、拡張を検討してください。これにより、既存のアダプターのデータを追加/クリアArrayAdapterすることもできます。

于 2012-08-16T11:37:27.380 に答える
0

通常、プログラムには多くのプログラムを含む多くのチャンネルがあり、UI スレッドでデータを解析および分析すると (遅かれ早かれ) ANR が発生するため、私の理解では、あなたのやり方はどのテレビ番組アプリケーションにも受け入れられません。別のサービスとコンテンツ プロバイダーの使用を検討して、UI スレッドに UI 関連のみを実行させ、対応するコンポーネントにデータ処理を任せることをお勧めします。プロバイダーで sqlite を介してデータを検索/処理する方が高速で簡単です。

最も近いデータの検索に関する質問について - 配列を並べ替えて、最も近いデータを検索することができます (たとえば、最初から反復するだけです)。

于 2012-08-16T09:53:51.640 に答える