我正在研究Android回收视图,我发现了这个例子
回收器适配器
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private String[] titles = {"Capter One",
"Chapter Two",
"Chapter Three",
"Chapter Four",
"Chapter Five",
"Chapter Six"
};
private String[] details = {"Det..One","Det..Two","Det.. Three","Det...Four","Det.. Five","Det..Six"};
private int[] images = {R.drawable.android_image_1,
R.drawable.android_image_2,
R.drawable.android_image_3,
R.drawable.android_image_4,
R.drawable.android_image_5,
R.drawable.android_image_6
};
@Override
public ViewHolder onCreateViewHolder( ViewGroup viewGroup, int i ){
View v = LayoutInflater.from (viewGroup.getContext ()).inflate (R.layout.card_layout, viewGroup,false);
ViewHolder viewHolder = new ViewHolder (v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.itemTitle.setText(titles[i]);
viewHolder.itemDetail.setText(details[i]);
viewHolder.itemImage.setImageResource(images[i]);
}
@Override
public int getItemCount() {
return titles.length;
}
class ViewHolder extends RecyclerView.ViewHolder /*implements Inter*/{
ImageView itemImage;
TextView itemTitle;
TextView itemDetail;
ViewHolder( View itemView ){
super(itemView);
itemImage = itemView.findViewById (R.id.item_image);
itemTitle = itemView.findViewById (R.id.item_title);
itemDetail = itemView.findViewById (R.id.item_detail);
itemView.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick ( View v ) {
int position = getAdapterPosition ();
position +=1;
Snackbar.make (v,"click on position" + titles[position],Snackbar.LENGTH_SHORT).setAction ("Action", null).show ();
}
});
}
}
}
Mainactivity.java:
public class MainActivity extends AppCompatActivity {
RecyclerView recycledView;
RecyclerView.LayoutManager layoutManager;
RecyclerView.Adapter adapter;
@Override
protected void onCreate ( Bundle savedInstanceState ) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
Toolbar toolbar = findViewById (R.id.toolbar);
setSupportActionBar (toolbar);
recycledView = findViewById (R.id.recycle_View);
layoutManager = new LinearLayoutManager (this);
recycledView.setLayoutManager (layoutManager);
adapter = new RecyclerAdapter ();
recycledView.setAdapter (adapter);
}
没什么特别的,而且效果很好。 我只是做了一点“最佳实践”的改动。 我想从这样的资源文件中获取标题数组:
<resources>
<string-array name="titles">
<item>Chap 1</item>
<item>Chap 2</item>
<item>Chap 3</item>
<item>Chap 4</item>
<item>Chap 5</item>
<item>Chap 6</item>
<item>Chap 7</item>
<item>Chap 8</item>
</string-array>
</resources>
所以我做了一些代码调整。。。 声明标题数组
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
**private String[] titles;**
我在onCreateViewHolder方法中链接资源
View v = LayoutInflater.from (viewGroup.getContext ()).inflate (R.layout.index_layout, viewGroup,false);
ViewHolder viewHolder = new ViewHolder (v);
**Resources res = v.getResources ();
titles=res.getStringArray (R.array.chapters);**
return viewHolder;
但是当我运行应用程序时,我得到java.lang.NullPointerException:尝试在com.example.evenbook.recycleradapter.getItemCount(recycleradapter.java:55)中得到空数组的长度
中的数组为null
public int getItemCount() {
return titles.length;
}
如果我尝试返回5,它是可以的(它只显示5卡项目)。
我还认为getItemCount方法在onCreateViewHolder之前就开始了,但我认为这是不可能的。 怎么了? 提前致谢
您可以使用getResources().getStringArray
从资源中获取数组
String[] array = getResources().getStringArray(R.array.titles);
然后您可以更改适配器构造函数以接受列表
RecyclerAdapter adapter = new RecyclerAdapter(array);
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private String[] titles;
RecyclerAdapter(String[] titles) {
this.titles = titles;
}
// ... rest of class
}
尝试以下更改:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private String[] titles;
private String[] details;
private int[] images;
public RecyclerAdapter() {
this.titles = = {"Capter One",
"Chapter Two",
"Chapter Three",
"Chapter Four",
"Chapter Five",
"Chapter Six"
};
this.details = = {"Det..One","Det..Two","Det.. Three","Det...Four","Det.. Five","Det..Six"};
this.images = = {R.drawable.android_image_1,
R.drawable.android_image_2,
R.drawable.android_image_3,
R.drawable.android_image_4,
R.drawable.android_image_5,
R.drawable.android_image_6
};
}
@Override
public ViewHolder onCreateViewHolder( ViewGroup viewGroup, int i ){
View v = LayoutInflater.from (viewGroup.getContext ()).inflate (R.layout.card_layout, viewGroup,false);
ViewHolder viewHolder = new ViewHolder (v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.itemTitle.setText(titles[i]);
viewHolder.itemDetail.setText(details[i]);
viewHolder.itemImage.setImageResource(images[i]);
}
@Override
public int getItemCount() {
return titles.length;
}
class ViewHolder extends RecyclerView.ViewHolder /*implements Inter*/{
ImageView itemImage;
TextView itemTitle;
TextView itemDetail;
ViewHolder( View itemView ){
super(itemView);
itemImage = itemView.findViewById (R.id.item_image);
itemTitle = itemView.findViewById (R.id.item_title);
itemDetail = itemView.findViewById (R.id.item_detail);
itemView.setOnClickListener (new View.OnClickListener () {
@Override
public void onClick ( View v ) {
int position = getAdapterPosition ();
position +=1;
Snackbar.make (v,"click on position" + titles[position],Snackbar.LENGTH_SHORT).setAction ("Action", null).show ();
}
});
}
}
}
我正在尝试用python、ecrypt数据记录音频原始数据并将其发送到。NET服务器,我在其中解密接收到的数据并转换为字节数组。当我将接收到的数据转换为字节数组时,就像这样的编码。ASCII码。GetBytes(decryptedData)一切都很正常。但最大字节值为63,发送数据的最大字节值为255。发送和接收数据的示例: 发送数据 3, 0, 3, 0, 3, 0, 4, 0, 4, 0, 2
问题内容: 我正在查询PostgreSQL数据库中的表。结果集使用表名查找所有列名,类型以及它是否可为空(主键“ id”除外)。这是正在使用的查询: 对于每个结果,我都有一个字符串数组,并且我尝试使用ResultSet方法来避免循环遍历结果。我想将返回的数组存储在字符串数组中,但出现类型不匹配错误 有没有一种方法可以将SQL Array对象转换或转换为String []? 相关代码: 问题答案:
我正在查询<code>information_schema。我的PostgreSQL数据库中的columns</code>表。结果集使用表名查找所有列名、类型以及是否可以为空(主键“id”除外)。这是正在使用的查询: 我为每个结果都有一个字符串数组,我正尝试使用ResultSet方法来避免结果循环。我想将返回的数组存储在字符串数组中,但出现类型不匹配错误 是否有方法将SQL Array对象转换或类
问题内容: 因此基本上,用户是从扫描仪输入中输入序列。 等等。 它可以是任意长度,并且必须是整数。 我想将输入的字符串转换为整数数组。 所以会,就等 有什么提示和想法吗?我正在考虑实现获取先前的编号并将它们解析在一起,并将其应用于数组中的当前可用插槽。但是我不太确定如何编写代码。 问题答案: 您可以从扫描仪中读取整个输入行,然后将其分开,然后得到一个,将每个数字解析为与索引一对一匹配的…(假设输入
问题内容: 我有一个一维String数组,我想将其转换为一维字节数组。我该怎么做呢?这需要ByteBuffer吗?我怎样才能做到这一点?(字符串可以是任意长度,只想知道如何执行这样的操作。将其转换为字节数组后,如何将其转换回String数组? -担 问题答案: 数组到数组 ,应该 手动 将其转换为两边,但是如果只有一个String,则可以和; 像这样 对于string []中的一个字节[],您必须
问题内容: 我需要将结果集转换为字符串数组。我正在从数据库中读取电子邮件地址,我需要能够像这样发送它们: 这是我的阅读电子邮件地址的代码: MyOutput是: 我需要这样: 我正在使用Oracle 11g。 问题答案: 获得所需的输出: 替换这些行 通过
问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:
问题内容: 我正在使用Swift 3,并且需要与C API进行交互,例如,C API接受以NULL终止的字符串列表 在Swift中,API的导入方式如下 在尝试使用类型转换数百次后,我还是无法完成这项工作。即使我传递通过编译的有效指针,它也会在运行时崩溃,提示无效的内存访问(在strlen函数中)。还是关于ARC的东西? 问题答案: 您可以像如何通过使用char **参数将Swift字符串数组传递