动态添加布局到适配器的机器人getview方法 [英] dynamically add layout into getview method of adaptor in android
问题描述
我要显示的列表视图中的每一行N多的ImageView的。 ImageView的数量取决于JSON解析值。它可以是2或3或4每次当我获取JSON从服务器。
所以我不能用inflate.so我决定在getview方法创建动态视图,并添加ImageView的N个眼帘使用静态XML
我写下面的code,但它仍然只显示一个ImageView的和水平滚动不会在所有的工作。
任何帮助是pciated AP $ P $
公共类MyAdapter扩展了BaseAdapter {
私人LayoutInflater充气;
私人的ArrayList<字符串>数据;
语境CON;
公共MyAdapter(上下文的背景下,ArrayList的<字符串>数据1){
//缓存LayoutInflater更快使用
充气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//设置事件的数据
数据= DATA1;
CON =背景;
}
公共查看getView(INT位置,查看查看,ViewGroup中的ViewGroup){
ViewHolder持有人=新ViewHolder(); //我们认为该行持有人
如果(查看== NULL){
HorizontalScrollView HR =新HorizontalScrollView(CON);
的LinearLayout布局=新的LinearLayout(CON);
layout.setLayoutParams(新LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
//布局设置一些属性
的for(int i = 1;我2;我++)
{
holder.image =新ImageView的(CON);
LinearLayout.LayoutParams的LayoutParams =新LinearLayout.LayoutParams(100 * I,100 * I);
holder.image.setLayoutParams(的LayoutParams);
layout.addView(holder.image);
}
//字幕设置一些属性
//产生通过code中的布局
hr.addView(布局);
鉴于=小时; // INSTEAD OF爆式布局的行我只是绑定IT TO最近创建的布局
//绑定持有人的意见,布局的意见
view.setTag(保持器);
Log.w(MyApp的,新视图);
}
其他
{
支架=(ViewHolder)view.getTag();
Log.w(中再利用的myapp);
}
//执行查看的休息
的for(int i = 0;我2;我++)
{
holder.image.setImageResource(R.drawable.ic_launcher);
}
返回查看;
}
静态类ViewHolder {
ImageView的形象;
TextView的称号;
TextView的类型;
HorizontalScrollView小时;
}
@覆盖
公众诠释getCount将(){
// TODO自动生成方法存根
返回4;
}
@覆盖
公共对象的getItem(INT位置){
// TODO自动生成方法存根
返回null;
}
@覆盖
众长getItemId(INT位置){
// TODO自动生成方法存根
返回1;
}
}
确认这是你想要我猜。刚刚成立的随机值图像中每行
公共类MyAdapter扩展了BaseAdapter {
私人LayoutInflater充气;
私人的ArrayList<字符串>数据;
语境CON;
公共MyAdapter(上下文的背景下,ArrayList的<字符串>数据1){
充气=(LayoutInflater)上下文
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
数据= DATA1;
CON =背景;
}
公共查看getView(INT位置,查看查看,ViewGroup中的ViewGroup){
ViewHolder持有人=新ViewHolder(); //我们认为该行持有人
如果(查看== NULL){
HorizontalScrollView HR =新HorizontalScrollView(CON);
的LinearLayout布局=新的LinearLayout(CON);
layout.setLayoutParams(新LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
的for(int i = 0; I< data.size();我++){
holder.image =新ImageView的(CON);
layout.addView(holder.image);
holder.image.setImageResource(R.drawable.ic_launcher);
}
hr.addView(布局);
鉴于=小时;
view.setTag(保持器);
}
支架=(ViewHolder)view.getTag();
返回查看;
}
@覆盖
公众诠释getCount将(){
// TODO自动生成方法存根
返回data.size();
}
@覆盖
公共对象的getItem(INT位置){
// TODO自动生成方法存根
返回null;
}
@覆盖
众长getItemId(INT位置){
// TODO自动生成方法存根
返回1;
}
}
类ViewHolder {
ImageView的形象;
TextView的称号;
TextView的类型;
HorizontalScrollView小时;
}
I want to display N number of imageview in every row of list view. Number of imageview depends on json parsing value. it can be 2 or 3 or 4 everytime when i fetch json from server.
so I can not use static xml by using inflate.so i decided to create dynamic view in getview method and add N number of imageview into view
I write following code but it still display only one imageview and horizontal scroll wont work at all..
any help is appreciated
public class MyAdapter extends BaseAdapter{
private LayoutInflater inflater;
private ArrayList<String> data;
Context con;
public MyAdapter(Context context, ArrayList<String> data1){
// Caches the LayoutInflater for quicker use
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Sets the events data
data= data1;
con=context;
}
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder=new ViewHolder(); //our view holder of the row
if (view == null) {
HorizontalScrollView hr=new HorizontalScrollView(con);
LinearLayout layout=new LinearLayout(con);
layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
//layout set some properties
for(int i=1;i<2;i++)
{
holder.image =new ImageView(con);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100*i, 100*i);
holder.image.setLayoutParams(layoutParams);
layout.addView(holder.image);
}
//subtitle set some properties
//CREATING THE LAYOUT THROUGH CODE
hr.addView(layout);
view = hr; //INSTEAD OF INFLATING A LAYOUT FOR THE ROW I JUST BINDED IT TO THE RECENTLY CREATED LAYOUT
//bind the views of the holder to the views of the layout
view.setTag(holder);
Log.w("myapp", "new view");
}
else
{
holder = (ViewHolder) view.getTag();
Log.w("myapp", "in reuse");
}
//rest of implementation of the View
for(int i=0;i<2;i++)
{
holder.image.setImageResource(R.drawable.ic_launcher);
}
return view;
}
static class ViewHolder {
ImageView image;
TextView title;
TextView type;
HorizontalScrollView hr;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 4;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 1;
}
}
Check this is what you want I guess. Just set random value for each line in images
public class MyAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<String> data;
Context con;
public MyAdapter(Context context, ArrayList<String> data1) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
data = data1;
con = context;
}
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder = new ViewHolder(); // our view holder of the row
if (view == null) {
HorizontalScrollView hr = new HorizontalScrollView(con);
LinearLayout layout = new LinearLayout(con);
layout.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
for (int i = 0; i < data.size(); i++) {
holder.image = new ImageView(con);
layout.addView(holder.image);
holder.image.setImageResource(R.drawable.ic_launcher);
}
hr.addView(layout);
view = hr;
view.setTag(holder);
}
holder = (ViewHolder) view.getTag();
return view;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 1;
}
}
class ViewHolder {
ImageView image;
TextView title;
TextView type;
HorizontalScrollView hr;
}
这篇关于动态添加布局到适配器的机器人getview方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!