मैं पंक्तियों के लिए अनुकूलित दृश्य के साथ एक सूची बनाने के लिए कोशिश कर रहा हूँ है, प्रत्येक पंक्ति एक छवि देख सकते हैं और दो पाठ विचारों शामिल होंगे।ArrayAdapter डेटा सेट में तत्वों की संख्या शून्य
आदेश करने के लिए तो मैं ArrayAdapter वर्ग (PostersArrayAdapter कहा जाता है) और व्यवस्था डेटा और पंक्ति लेआउट के बीच सही संबंध बनाने के लिए getView() विधि अधिरोहित बढ़ाया।
हालांकि, जब मैं कुछ डेटा के साथ पोस्टरडेटा वर्ग (मेरे कार्यान्वयन) की एक सरणी के साथ पोस्टरअरे ऐडाप्टर बनाने का प्रयास करता हूं तो परिणाम यह है कि एडाप्टर खाली है, मतलब getCount() शून्य देता है और सूची दृश्य खाली है।
किसी को भी कर सकते हैं सुझाव क्या मैं गलत कर रहा हूँ? मैं यहां एक कोड पर भरोसा कर रहा हूं जो मुझे मिला - http://www.vogella.de/articles/AndroidListView/article.html
बहुत बहुत धन्यवाद!
यहाँ प्रासंगिक कोड है:
public class PostersListActivity extends ListActivity {
final private int NUM_OF_PICS = 2;
private ContentGetter cg;
private PosterData[] posters;
private ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cg = new ContentGetter(NUM_OF_PICS);
try
{
posters = cg.parseIndexFile();
int res = cg.DownloadPosterPics(1);
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
// Use our own list adapter
listView = (ListView)findViewById(android.R.id.list);
//listView.setAdapter((ListAdapter) new ArrayAdapter<String>(this,R.layout.list_item,R.id.title,titles));
PostersArrayAdapter postersAdapter = new PostersArrayAdapter(this, posters);
Log.d("PostersListActivity.onCreate()","Number of elementes in the data set of the adapter is " + postersAdapter.getCount());
listView.setAdapter(postersAdapter);
}
public class PostersArrayAdapter extends ArrayAdapter<PosterData> {
private final Activity context;
private final PosterData[] posters;
public PostersArrayAdapter(Activity context, PosterData[] posters) {
super(context, R.layout.list_item);
this.context = context;
this.posters = posters;
}
// static to save the reference to the outer class and to avoid access to
// any members of the containing class
class ViewHolder {
public ImageView logo;
public TextView title;
public TextView names;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ViewHolder will buffer the assess to the individual fields of the row
// layout
ViewHolder holder;
// Recycle existing view if passed as parameter
// This will save memory and time on Android
// This only works if the base layout for all classes are the same
View rowView = convertView;
if (rowView == null)
{
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(R.layout.list_item, null, true);
holder = new ViewHolder();
holder.title = (TextView) rowView.findViewById(R.id.title);
holder.names = (TextView) rowView.findViewById(R.id.names);
holder.logo = (ImageView) rowView.findViewById(R.id.logo);
rowView.setTag(holder);
}
else
{
holder = (ViewHolder) rowView.getTag();
}
holder.title.setText(posters[position].getTitle());
holder.names.setText(posters[position].getNames());
holder.logo.setImageResource(R.drawable.icon);
return rowView;
}
}
}
यहाँ सूची दृश्य लेआउट मैं उपयोग कर रहा हूँ है (PosterData वर्ग दो स्ट्रिंग क्षेत्रों के साथ सिर्फ एक वर्ग है):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/textView1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/selectPoster"
android:layout_gravity="center_horizontal">
</TextView>
<ListView android:id="@android:id/list"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</ListView>
</LinearLayout>
और यहाँ है सूची तत्व लेआउट का उपयोग कर रहा हूं:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<LinearLayout android:id="@+id/linearLayout1"
android:layout_height="match_parent"
android:layout_width="wrap_content" >
<ImageView android:id="@+id/logo"
android:src="@drawable/icon"
android:layout_height="wrap_content"
android:layout_width="22px"
android:layout_marginTop="4px"
android:layout_marginRight="4px"
android:layout_marginLeft="4px">
</ImageView>
<LinearLayout android:id="@+id/linearLayout2"
android:layout_height="match_parent"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/title"
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30px">
</TextView>
<TextView android:id="@+id/names"
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
ठीक है, अब यह सही संख्या लौटाता है। इससे भी बेहतर, अब सूची सही ढंग से दिखाई देती है (सूची खाली होने से पहले)। GetCount विधि को ओवरराइड करने से यह हल क्यों हुआ? –
मुझे लगता है कि ऐसा इसलिए है क्योंकि आप सही सुपर कन्स्ट्रक्टर –
पर कॉल नहीं कर रहे हैं, सही कॉल करने से getCount को ओवरराइड करने की आवश्यकता को रोका जा सकेगा? आपको क्यों लगता है कि मैं सही कॉल नहीं कर रहा हूं? किस सिद्धांत ने आपको इस निष्कर्ष पर पहुंचाया? –