ListView内容更改

时间:2013-11-19 17:32:08

标签: android mobile

首先,我必须承认我是Android编程的初学者(我在PHP方面非常先进)。我有一个由自由职业者开发的应用程序,但随后他忙着停止回答我,所以现在我必须弄清楚如何解决我即将解释的问题。

我的应用中有一个部分,其中显示了YouTube视频列表。我将此部分分为两类,我可以使用两个不同的按钮从第一个切换到第二个。

我的问题是,在我点击第二个类别的按钮(第一个是默认设置)后,我会看到相应视频的缩略图和标题,但是当我点击它们时,打开的链接对应于那里的视频在另一类。

在我研究了代码(第一次处理Android代码)之后,我发现自由职业者使用ListView来存储视频列表,并用适配器填充它。

以下是加载视频的代码:

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

import com.topchannel.tv.activitys.R;
import com.bestwebmobile.topchannel.adapters.VideoAdapter;
import com.bestwebmobile.topchannel.constants.Constants;
import com.bestwebmobile.topchannel.model.Video;
import com.bestwebmobile.topchannel.parser.ContainerData;
import com.bestwebmobile.topchannel.util.BackgroundTask;

public class VideoActivity extends Activity implements OnClickListener, OnItemClickListener
{
private ListView mListView;
private ArrayList<Video> feeds;
private ArrayList<Video> TVfeeds; // category<= 10
private ArrayList<Video> noTVfeeds; // category >10
private boolean tvselected = false;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.video_layout);
    setViews();
    getFeeds();
}

public void setViews()
{
    mListView = (ListView) findViewById(R.id.list_article);
    mListView.setOnItemClickListener(this);
    ((Button) findViewById(R.id.tv_btn)).setOnClickListener(this);
    ((Button) findViewById(R.id.lajme_btn)).setOnClickListener(this);
    ((LinearLayout) findViewById(R.id.prog)).setVisibility(View.VISIBLE);
}

private void getFeeds()
{
    BackgroundTask task = new BackgroundTask(this)
    {

        @Override
        public void onLoadStarted()
        {
            feeds = ContainerData.getVideoFeeds(Constants.VIDEO_URL);

        }

        @Override
        public void onLoadFinished()
        {

            noTVfeeds = new ArrayList<Video>();
            TVfeeds = new ArrayList<Video>();
            if (feeds != null && !feeds.equals(null) && feeds.size() > 0)
            {
                for (Video video : feeds)
                {
                    if (video.getCategory() > 10)
                    {
                        noTVfeeds.add(video);
                    }
                    else
                    {
                        TVfeeds.add(video);
                    }
                }
                ((LinearLayout) findViewById(R.id.prog)).setVisibility(View.GONE);
                mListView.setAdapter(new VideoAdapter(VideoActivity.this, TVfeeds));
            }
            else
            {
                Toast.makeText(VideoActivity.this, "Problem", Toast.LENGTH_SHORT).show();
            }

        }
    };
    task.doWork();
}

@Override
public void onClick(View v)
{

    switch (v.getId())
    {
        case R.id.tv_btn:
        {
            if (feeds != null && !feeds.equals(null) && feeds.size() > 0)
            {

                mListView.setAdapter(new VideoAdapter(VideoActivity.this, noTVfeeds));                      ((Button) findViewById(R.id.tv_btn)).setVisibility(View.GONE);
                    ((Button) findViewById(R.id.lajme_btn)).setVisibility(View.VISIBLE);
                    ((Button) findViewById(R.id.tv_btn)).setVisibility(View.GONE);
            }
        }
        break;
        case R.id.lajme_btn:
        {
            if (feeds != null && !feeds.equals(null) && feeds.size() > 0)
            {

                    mListView.setAdapter(new VideoAdapter(VideoActivity.this, TVfeeds));
                    ((Button) findViewById(R.id.tv_btn)).setVisibility(View.VISIBLE);
                    ((Button) findViewById(R.id.lajme_btn)).setVisibility(View.GONE);
            }
        }
        break;
        default:
        break;
    }



}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int index, long arg3)
{
    startActivity(new Intent(Intent.ACTION_VIEW,     Uri.parse(feeds.get(index).getYoutubeLink())));
}

}

这是getVideoFeeds()函数:

public static ArrayList<Video> getVideoFeeds(String path)
{
    SAXParserFactory fabrique = SAXParserFactory.newInstance();
    SAXParser parseur = null;
    ArrayList<Video> feeds = null;
    try
    {
        parseur = fabrique.newSAXParser();
    }
    catch (ParserConfigurationException e)
    {
        e.printStackTrace();
    }
    catch (SAXException e)
    {
        e.printStackTrace();
    }
    URL url = null;
    try
    {
        url = new URL(path);
    }
    catch (MalformedURLException e1)
    {
        e1.printStackTrace();
    }

    DefaultHandler handler = new ParseVideoHandler();
    try
    {
        parseur.parse(url.openConnection().getInputStream(), handler);

        feeds = ((ParseVideoHandler) handler).getData();
    }
    catch (SAXException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    return feeds;
}

所以,我猜想当ListView中加载第二类内容时,之前的代码不会消失,但只是变得不可见,但仍然可以点击。只是一个猜测!

任何帮助将不胜感激。别忘了,这里的初学者,尽可能清楚:)

谢谢!

0 个答案:

没有答案