获取 ListView 单元格对象以在构建时递增
Getting a ListView cell object to increment on construction
所以我正在尝试在 android 工作室中制作一个简单的优先待办事项列表。我创建了一个硬编码列表来测试,列表单元格内容只是优先级的整数和消息的字符串。我在让细胞填充时遇到了麻烦。我终于到了列表在屏幕上填充的地步,但我无法弄清楚如何获得自动递增 after/during 每个对象构造的优先级。我只得到全 1。我想我不清楚细胞群中发生的过程,或者我可能不完全理解基本构造函数。非常感谢任何 help/pointers。对所有 Log.d 表示抱歉,我真的不完全理解适配器,并且在找出正确的语法时遇到了麻烦。
这是 Cell 对象
public class CellContent {
private int priority = 0;
private String itemContent;
public CellContent(String itemContent)
{
priority+=1;
this.itemContent = itemContent;
}
public String getItemContent() {
return itemContent;
}
public void setItemContent(String itemContent) {
this.itemContent = itemContent;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority=priority;
}
}
这是包含单元格的列表
public class ListDataSource {
private ArrayList<CellContent> todoList;
public ListDataSource() {
todoList = new ArrayList<CellContent>();
setupToDoList();
Log.d("ListDataSource", "ListDataSource object created");
}
public void setupToDoList()
{
todoList.add(new CellContent("Wash Dishes"));
todoList.add(new CellContent("Do Laundry"));
todoList.add(new CellContent("Clean Bathroom"));
todoList.add(new CellContent("Sweep and Mop"));
todoList.add(new CellContent("Walk Dog"));
}
public int getPriority(int position)
{
return todoList.get(position).getPriority();
}
public String getItemContent(int position)
{
return todoList.get(position).getItemContent();
}
public int getDataSourceLength()
{
return todoList.size();
}
}
这是适配器
public class ListDataSourceAdapter extends BaseAdapter {
private Context myContext;
private LayoutInflater myInflater;
private ListDataSource myDataSource;
public ListDataSourceAdapter(Context ctx, ListDataSource ds)
{
Log.d("ListDataSourceAdapter","Attempting to create ListDataSourceAdapter");
myContext = ctx;
myDataSource = ds;
myInflater = (LayoutInflater)myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Log.d("ListDataSourceAdapter","ListDataSourceAdapter created successfully");
}
@Override
public int getCount()
{
return myDataSource.getDataSourceLength();
}
@Override
public Object getItem(int arg0)
{
return myDataSource.getItemContent(arg0);
}
@Override
public long getItemId(int position)
{
return myDataSource.getPriority(position);
}
@Override
public View getView (int position, View convertView, ViewGroup parent)
{
Log.d("getView","Attempting getView");
TextView priority;
TextView itemContent;
if(convertView == null)
{
Log.d("getView", "Attempting to inflate cell");
convertView = myInflater.inflate(R.layout.cell_layout, parent, false);
}
Log.d("getView","attempting to link TextView priority");
priority = (TextView)convertView.findViewById(R.id.txtPriority);
Log.d("getView","link established, Attempting to set text for priority");
priority.setText(String.valueOf((myDataSource.getPriority(position))));
Log.d("getView", "attempting to link TextView listContent");
itemContent = (TextView)convertView.findViewById(R.id.txtListContent);
Log.d("getView","link established, Attempting to set text for listContent");
itemContent.setText(myDataSource.getItemContent(position));
Log.d("getView","Successfully executed getView");
return convertView;
}
}
最后但同样重要的是,这是我的 Activity
public class MainActivity extends AppCompatActivity {
private ListDataSource ds;
private ListView listViewToDo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity","Attempting to create data source");
try {
ds = new ListDataSource();
}
catch(Exception e)
{
e.printStackTrace();
Log.d("MainActivity","Failed to create data source");
}
Log.d("Main Activity","Attempting to link empty list view to on screen view");
listViewToDo = (ListView)findViewById(R.id.listOfLists);
Log.d("Main Activity","Views linked, Attempting to set adapter to listView");
listViewToDo.setAdapter(new ListDataSourceAdapter(this, ds));
Log.d("Maing Activity","Successfully set Adapter");
}
}
priority
是一个实例字段。您的 CellContent
的每个实例都有自己的 priority
;每个都初始化为零,然后在构造函数中递增 1。 CellContent
的一个实例不知道 CellContent
的任何其他实例的内容,它们是完全独立的,因此每个实例报告其优先级为 1。
您要查找的行为需要一个静态字段。静态字段由封闭类型的所有实例共享,并且仅在首次使用 class 时初始化一次:
private static int priorityCounter = 0; // shared by all instances
private int priority; // only this instance
public CellContent(...) {
priority = ++priorityCounter;
...
}
现在每次创建 CellContent
都会增加一个共享计数器并将其 priority
设置为该值。
所以我正在尝试在 android 工作室中制作一个简单的优先待办事项列表。我创建了一个硬编码列表来测试,列表单元格内容只是优先级的整数和消息的字符串。我在让细胞填充时遇到了麻烦。我终于到了列表在屏幕上填充的地步,但我无法弄清楚如何获得自动递增 after/during 每个对象构造的优先级。我只得到全 1。我想我不清楚细胞群中发生的过程,或者我可能不完全理解基本构造函数。非常感谢任何 help/pointers。对所有 Log.d 表示抱歉,我真的不完全理解适配器,并且在找出正确的语法时遇到了麻烦。
这是 Cell 对象
public class CellContent {
private int priority = 0;
private String itemContent;
public CellContent(String itemContent)
{
priority+=1;
this.itemContent = itemContent;
}
public String getItemContent() {
return itemContent;
}
public void setItemContent(String itemContent) {
this.itemContent = itemContent;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority=priority;
}
}
这是包含单元格的列表
public class ListDataSource {
private ArrayList<CellContent> todoList;
public ListDataSource() {
todoList = new ArrayList<CellContent>();
setupToDoList();
Log.d("ListDataSource", "ListDataSource object created");
}
public void setupToDoList()
{
todoList.add(new CellContent("Wash Dishes"));
todoList.add(new CellContent("Do Laundry"));
todoList.add(new CellContent("Clean Bathroom"));
todoList.add(new CellContent("Sweep and Mop"));
todoList.add(new CellContent("Walk Dog"));
}
public int getPriority(int position)
{
return todoList.get(position).getPriority();
}
public String getItemContent(int position)
{
return todoList.get(position).getItemContent();
}
public int getDataSourceLength()
{
return todoList.size();
}
}
这是适配器
public class ListDataSourceAdapter extends BaseAdapter {
private Context myContext;
private LayoutInflater myInflater;
private ListDataSource myDataSource;
public ListDataSourceAdapter(Context ctx, ListDataSource ds)
{
Log.d("ListDataSourceAdapter","Attempting to create ListDataSourceAdapter");
myContext = ctx;
myDataSource = ds;
myInflater = (LayoutInflater)myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Log.d("ListDataSourceAdapter","ListDataSourceAdapter created successfully");
}
@Override
public int getCount()
{
return myDataSource.getDataSourceLength();
}
@Override
public Object getItem(int arg0)
{
return myDataSource.getItemContent(arg0);
}
@Override
public long getItemId(int position)
{
return myDataSource.getPriority(position);
}
@Override
public View getView (int position, View convertView, ViewGroup parent)
{
Log.d("getView","Attempting getView");
TextView priority;
TextView itemContent;
if(convertView == null)
{
Log.d("getView", "Attempting to inflate cell");
convertView = myInflater.inflate(R.layout.cell_layout, parent, false);
}
Log.d("getView","attempting to link TextView priority");
priority = (TextView)convertView.findViewById(R.id.txtPriority);
Log.d("getView","link established, Attempting to set text for priority");
priority.setText(String.valueOf((myDataSource.getPriority(position))));
Log.d("getView", "attempting to link TextView listContent");
itemContent = (TextView)convertView.findViewById(R.id.txtListContent);
Log.d("getView","link established, Attempting to set text for listContent");
itemContent.setText(myDataSource.getItemContent(position));
Log.d("getView","Successfully executed getView");
return convertView;
}
}
最后但同样重要的是,这是我的 Activity
public class MainActivity extends AppCompatActivity {
private ListDataSource ds;
private ListView listViewToDo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity","Attempting to create data source");
try {
ds = new ListDataSource();
}
catch(Exception e)
{
e.printStackTrace();
Log.d("MainActivity","Failed to create data source");
}
Log.d("Main Activity","Attempting to link empty list view to on screen view");
listViewToDo = (ListView)findViewById(R.id.listOfLists);
Log.d("Main Activity","Views linked, Attempting to set adapter to listView");
listViewToDo.setAdapter(new ListDataSourceAdapter(this, ds));
Log.d("Maing Activity","Successfully set Adapter");
}
}
priority
是一个实例字段。您的 CellContent
的每个实例都有自己的 priority
;每个都初始化为零,然后在构造函数中递增 1。 CellContent
的一个实例不知道 CellContent
的任何其他实例的内容,它们是完全独立的,因此每个实例报告其优先级为 1。
您要查找的行为需要一个静态字段。静态字段由封闭类型的所有实例共享,并且仅在首次使用 class 时初始化一次:
private static int priorityCounter = 0; // shared by all instances
private int priority; // only this instance
public CellContent(...) {
priority = ++priorityCounter;
...
}
现在每次创建 CellContent
都会增加一个共享计数器并将其 priority
设置为该值。