首先,我必须承认我是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中加载第二类内容时,之前的代码不会消失,但只是变得不可见,但仍然可以点击。只是一个猜测!
任何帮助将不胜感激。别忘了,这里的初学者,尽可能清楚:)
谢谢!