Bu kitaplığı https://github.com/ShirwaM/Simplistic-RSS uygulamaya çalışıyorum.ListView ve ArrayAdpater'ı başka bir sınıfa iletme
Kitaplık açıklandığı gibi yapar, ancak besleme çıktısının nasıl işleneceğini sevmiyorum. Temel olarak ana aktivitede özel bir sınıfın içinde doğrudan ListView ve ArrayAdapter'ı çağırır. Bu, iki özet akışını gösteren iki ListView’in olmasını istiyorsam, tüm özel sınıfı çoğaltmak zorunda olduğum anlamına gelir. Yapmak istediğim, bir ArrayAdapater ve ListView'in kabul edilmesini sağlamaktır, böylece bu sınıfı kapatabilir ve ardından ilgili feed URL'sini ve çıktı için ListView'i iki kez çağırabilirim.
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity
{
private ListView mList;
private ListView lList;
ArrayAdapter<String> adapter;
ArrayAdapter<String> adapterSecond;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.rss_layout);
lList = (ListView) findViewById(R.id.listTwo);
mList = (ListView) findViewById(R.id.listOne);
adapterSecond = new ArrayAdapter<String>(this, R.layout.basic_list_item);
adapter = new ArrayAdapter<String>(this, R.layout.basic_list_item);
new GetRssFeed().execute("http://feeds.arstechnica.com/arstechnica/index");
new GetRssFeedSecond().execute("http://feeds.skynews.com/feeds/rss/home.xml");
}
private class GetRssFeed extends AsyncTask<String, Void, Void>
{
@Override
protected Void doInBackground(String... params)
{
try
{
RssReader rssReader = new RssReader(params[0]);
Integer i = 0;
for (RssItem item : rssReader.getItems())
{
adapter.add(item.getTitle());
i++;
if(i == 7)
{
break;
}
}
} catch (Exception e)
{
Log.v("Error Parsing Data", e + "");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
adapter.notifyDataSetChanged();
mList.setAdapter(adapter);
}
}
private class GetRssFeedSecond extends AsyncTask<String, Void, Void>
{
@Override
protected Void doInBackground(String... params)
{
try
{
RssReader rssReader = new RssReader(params[0]);
Integer i = 0;
for (RssItem item : rssReader.getItems()) {
adapter.add(item.getTitle());
i++;
if (i == 7) {
break;
}
}
} catch (Exception e)
{
Log.v("Error Parsing Data", e + "");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
adapterSecond.notifyDataSetChanged();
lList.setAdapter(adapterSecond);
}
}
}
GetRssFeed
Simplistic-RSS örnek kod uyarınca, Adaptörü ve ListView ile kodlanmış olduğundan Gördüğünüz gibi, iki farklı listviews oluşturmak için iki GetRssFeed
sınıfları oluşturmak gerekir. Bunu yapmak istediğim bir GetRssFeed
var, sadece ilgili Bağdaştırıcıya ve ListView'e iletilmek üzere arayabilirim.
diyoruz,
Sizin tek AsyncTask şöyle görünecek, aşağıda gibi çağrı Veriler Aktiviteye geri dönmek için döndüğünde AsyncTask'ta bir arabirim geri çağrısı kullanın. Bir AsyncTask'taki Görünümler üzerinde tutulması –
@MikeM dezavantajlarına sahiptir. Bağdaştırıcıyı ListView'de nasıl ayarlıyorsunuz? – jskrwyk