Я наконец-то реализовал расширенный ArrayAdapter, и все работает правильно, другое, что тот факт, что первый элемент, добавленный в список, отображается без текста в текстовом представлении. Интересно, что, хотя достаточно было добавлено достаточно, чтобы список был достаточно длинным, чтобы прокручивать строку «без текста» с экрана, а затем снова включаться, то теперь он корректно показывает текст. Учитывая, что они также показывают тост, чтобы убедиться, что то, что мне нужно отобразить, на самом деле есть. то я думаю, что проблема действительно связана с тем, как выглядит список, а не с какой-то программной ошибкой в том, как создается список в первую очередь. Я новичок в этом и полностью готов признать любые ошибки, которые я, возможно, сделал. Единственный вопрос, который я мог найти, это todo с компоновкой элемента listview, который является линейным, а не относительным расположением, поэтому я изменил его, и он сделал то же самое. Мой код ниже, извините его долго, но я не знал, какие биты могут быть исключены, так что у вас есть все. Я признателен за любую помощь на всех здесь :)Android: Пустое текстовое представление для первого элемента в виде списка
package com.bitcrazy.gez.electricitycost;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import java.util.ArrayList;
import java.util.List;
public class HouseholdViewer extends ActionBarActivity {
public Household house = new Household();
ApplianceListAdapter ala = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_household_viewer);
AdView mAdView = (AdView) findViewById(R.id.adViewHousehold);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
ala = new ApplianceListAdapter(
this, R.layout.app_list_item, house.getApplianceDescs());
ala.notifyDataSetChanged();
ListView lv = (ListView) findViewById(R.id.listView_appliancesList);
lv.setAdapter(ala);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(),
"Appliance was clicked at " + position, Toast.LENGTH_LONG).show();
}
});
Button addAppliance = (Button) findViewById(R.id.button_AddAppliance);
addAppliance.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent gotoAddAppliance = new Intent(v.getContext(), AddAppliance.class);
startActivityForResult(gotoAddAppliance, 1);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
Appliance a = data.getParcelableExtra("newAppliance");
a.setCost(a.getCost(house.getElectricityCostPerKwh())/100);
a.scaleCost(house.getAtts().getDaysInMonth());
house.addAppliance(a);
Toast.makeText(getApplicationContext(),
"new Appliance " + a.toString(),
Toast.LENGTH_LONG).show();
}
}
ala.notifyDataSetChanged();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_household_viewer, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private class ApplianceListAdapter extends ArrayAdapter<String>
{
private int layout;
public ApplianceListAdapter(Context context, int resource, List<String> objects)
{
super(context, resource, objects);
layout = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
Viewholder holder;
if(convertView == null)
{
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(layout, parent, false);
holder = new Viewholder();
holder.thumbnail = (ImageView) convertView.findViewById(
R.id.imageView_applianceIcon);
holder.description = (TextView) convertView.findViewById(
R.id.textView_ApplianceTextDesc);
holder.edit = (Button) convertView.findViewById(
R.id.button_edit);
holder.deleteButton = (ImageButton) convertView.findViewById(
R.id.imageButton_removeAppliance);
}
else {
holder = (Viewholder) convertView.getTag();
holder.description.setText(getItem(pos));
}
holder.deleteButton.setOnClickListener(new AdapterView.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "Delete was clicked for List Item "
+ pos,Toast.LENGTH_SHORT).show();
}
});
holder.edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "Edit was clicked for Appliance "
+ pos, Toast.LENGTH_SHORT).show();
}
});
convertView.setTag(holder);
return convertView;
}
}
private class Viewholder
{
ImageView thumbnail;
TextView description;
Button edit;
ImageButton deleteButton;
}
}
сократить до погони, описать вам проблемы в ясной и краткой форме. –
извините. первый элемент, который я добавляю в свой список (начинается с пустого при первом показе), не отображает текст в части textview. ive подтвердил, что он существует, но его не показывают. каждый другой элемент, который я добавляю, в порядке. – gezinspace
какой части не отображается? –