Привет, У меня возникли проблемы с попыткой получить представление списка, которое я создал, чтобы добавить все, что есть входы пользователя в представление EditText. Содержимое должно быть добавлено, когда пользователь нажимает кнопку «Добавить», но программа просто падает, не говоря уже о работе очень медленно. Я не добавил весь код ниже только того, что мне кажется актуальным.Позволяет пользователю добавлять в ListView из EditText
public class ListViewActivity_Two extends Activity
{
EditText edit; Button add;
final List<String> data = new ArrayList<String>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
data.add("Hello");
edit = (EditText)findViewById(R.id.editTxt);
add = (Button) findViewById(R.id.add);
add.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
data.add(edit.getText().toString());
}
});
/**
for(int i = 1; i <= 10; i++)
{
data.add(String.format("Item %d", i));
}
*/
// Declare an instance of our custom adapter class
CustomAdapter adapter = new CustomAdapter(this, data);
ListView listView = (ListView)findViewById(android.R.id.list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView listview, View v, int pos, long id)
{
TextView textView = (TextView)v.findViewById(android.R.id.text1);
toast((String) textView.getText());
}
});
}
Данные.add() находятся там, чтобы убедиться, что я действительно могу добавить в ListView, я могу. Я делаю то же самое в onClickButton, так почему это происходит? Также я прав, чтобы объявить создание представлений выше метода onCreate или они должны быть в нем, чтобы работать правильно?
Редактировать
Вот CustomAdapter класса
package com.stylingandroid.listview;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class CustomAdapter extends BaseAdapter
{
private final Context context;
private final List<String> items;
public CustomAdapter(Context context, List<String> items)
{
this.context = context;
this.items = items;
}
@Override
public int getCount()
{
return items.size();
}
@Override
public Object getItem(int position)
{
return items.get(position);
}
@Override
public long getItemId(int position)
{
return getItem(position).hashCode();
}
/**
* Method getView() below is inefficent because inflating XML layouts is memory expensive
* because it involves parsing XML and then instantiating objects to represent all of the Views
* in the view hierarchy
*
* see: http://blog.stylingandroid.com/archives/632
*
* for more details.
*
* The more efficient code is below it!
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.item, parent, false);
final String item = (String) getItem(position);
TextView tv = (TextView)v.findViewById(android.R.id.text1);
tv.setText(item);
ImageView iv = (ImageView)v.findViewById(R.id.imageView);
iv.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, String.format("ImageClicked: %s", item), Toast.LENGTH_SHORT).show();
}
});
return v;
}
*/
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
/**
* this method differs from the one above because, here, all we are doing is inflating a new view
* if convertView is null. This significantly reduces the amount of object deletion and instantiation
* that's required, and vastly improves our scrolling performance particularly on low powered devices
*/
View v = convertView;
if(v == null)
{
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.item, parent, false);
}
final String item = (String) getItem(position);
TextView tv = (TextView)v.findViewById(android.R.id.text1);
tv.setText(item);
ImageView iv = (ImageView)v.findViewById(R.id.imageView);
iv.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, String.format("ImageClicked: %s", item), Toast.LENGTH_SHORT).show();
}
});
return v;
}
}
КСТАТИ я попытался изменить эмулятор для программы запуска на уровне API 7; это полностью разрушило программу. Теперь на каждом R., независимо от того, что я получаю сообщение об ошибке. имеет ли значение, что я изменил его в файле манифеста на 7? Последнее, что я убрал в проекте, но это не имеет значения - в чем проблема?
Не могли бы вы опубликовать реализацию пользовательского адаптера? Это может быть полезно :) – kyp
... и трассировка стека :-) – gwa
да ... это было бы здорово ^^ – kyp