需要帮助弄清楚为什么我不能使用自定义 ArrayAdapter 更改 TextView 文本
Need help figuring out why I cannot change TextView text using a custom ArrayAdapter
我有一个非常简单的应用程序:
activity_main.xml
<RelativeLayout>
<ListView android:id="@+id/emoticon_listview" />
</RelativeLayout>
item.xml
<TextView />
MainActivity.java
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int start = 0x1F004;
int end = 0x1F65C;
ListView listView = (ListView)findViewById(R.id.emoticon_listview);
Integer[] emoticon_array = new Integer[end - start]
for(int codepoint=start, i=0; codepoint<end; codepoint++, i++){
emoticon_array[i] = codepoint;
}
CustomArrayAdapter customArrayAdapter = new CustomArrayAdapter(this, R.layout.item, emoticon_array);
listView.setAdapter(customArrayAdapter);
}
CustomArrayAdapter.java
public class CustomArrayAdapter extends ArrayAdapter {
public customArrayAdapter(Context context, int resource, Object[] objects){
super(context, resource, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
TextView textView = (TextView) convertView;
if(textView != null){
textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));
// -or-
textView.setText("Hello, world!");
// -or-
textView.setText("whatever ...");
}
}
return super.getView(position, convertView, parent);
}
问题是,无论我在 CustomArrayAdapter
的覆盖 getView()
的 textView.setText()
中放入什么,它总是显示原始 emoticon_array 中的内容。
我什至试过这个:
return super.getView(position, textView, parent);
但这也没有任何作用。
我做错了什么?
谢谢:)
您正在使用自定义布局R.layout.item
所以
- 您需要在 getview 中扩充该布局
找到您的视图 (TextView) 并应用更改,然后 return 该视图
@Override
public View getView(int position, View convertView, ViewGroup parent){
TextView textView;
if(convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item,parent,false);
// to reuse view next time
}
// find your text view
textView = (TextView)convertView.findViewById(R.id.yourTextViewID);
textView.setText(getItem(position).toString());
//textView.setText("Hello, world!");
// -or-
//textView.setText("whatever ...");
// return inflated view
return convertView;
}
注意:不要使用 Object
数组并使用 getItem
获取项目 使用 position
显示数组中的项目
您应该在自己的 getView()
方法的开头调用 super.getView()
:
@Override
public View getView(int position, View convertView, ViewGroup parent){
TextView textView = (TextView) super.getView(position, convertView, parent);
textView.setText("Hello, world!");
// -or-
textView.setText("whatever ...");
return textView;
}
如果不是 null
,这允许您利用逻辑回收 convertView
。然后,您可以根据需要进行任何更改,并直接 return 结果视图。
请注意,我已删除此行:
textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));
首先,它缺少一对导致编译错误的括号。更重要的是,这做了很多工作,但并没有带来明显的好处。如果原始文本不是数字,最终结果要么是错误,要么是将文本设置回原始值。
我有一个非常简单的应用程序:
activity_main.xml
<RelativeLayout>
<ListView android:id="@+id/emoticon_listview" />
</RelativeLayout>
item.xml
<TextView />
MainActivity.java
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int start = 0x1F004;
int end = 0x1F65C;
ListView listView = (ListView)findViewById(R.id.emoticon_listview);
Integer[] emoticon_array = new Integer[end - start]
for(int codepoint=start, i=0; codepoint<end; codepoint++, i++){
emoticon_array[i] = codepoint;
}
CustomArrayAdapter customArrayAdapter = new CustomArrayAdapter(this, R.layout.item, emoticon_array);
listView.setAdapter(customArrayAdapter);
}
CustomArrayAdapter.java
public class CustomArrayAdapter extends ArrayAdapter {
public customArrayAdapter(Context context, int resource, Object[] objects){
super(context, resource, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
TextView textView = (TextView) convertView;
if(textView != null){
textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));
// -or-
textView.setText("Hello, world!");
// -or-
textView.setText("whatever ...");
}
}
return super.getView(position, convertView, parent);
}
问题是,无论我在 CustomArrayAdapter
的覆盖 getView()
的 textView.setText()
中放入什么,它总是显示原始 emoticon_array 中的内容。
我什至试过这个:
return super.getView(position, textView, parent);
但这也没有任何作用。
我做错了什么?
谢谢:)
您正在使用自定义布局R.layout.item
所以
- 您需要在 getview 中扩充该布局
找到您的视图 (TextView) 并应用更改,然后 return 该视图
@Override public View getView(int position, View convertView, ViewGroup parent){ TextView textView; if(convertView == null){ convertView = LayoutInflater.from(getContext()).inflate(R.layout.item,parent,false); // to reuse view next time } // find your text view textView = (TextView)convertView.findViewById(R.id.yourTextViewID); textView.setText(getItem(position).toString()); //textView.setText("Hello, world!"); // -or- //textView.setText("whatever ..."); // return inflated view return convertView; }
注意:不要使用 Object
数组并使用 getItem
获取项目 使用 position
显示数组中的项目
您应该在自己的 getView()
方法的开头调用 super.getView()
:
@Override
public View getView(int position, View convertView, ViewGroup parent){
TextView textView = (TextView) super.getView(position, convertView, parent);
textView.setText("Hello, world!");
// -or-
textView.setText("whatever ...");
return textView;
}
如果不是 null
,这允许您利用逻辑回收 convertView
。然后,您可以根据需要进行任何更改,并直接 return 结果视图。
请注意,我已删除此行:
textView.setText(new String(Characters.toChars(Integer.parseInt(textView.getText().toString))));
首先,它缺少一对导致编译错误的括号。更重要的是,这做了很多工作,但并没有带来明显的好处。如果原始文本不是数字,最终结果要么是错误,要么是将文本设置回原始值。