使用listview以静态方式显示数据

时间:2014-11-25 03:21:11

标签: android android-layout listview android-listview

我是Android新手,我正在使用listview。我试图在类文件中使用xml中的listview和类文件中的适配器来显示数据。我正在研究以下3个文件。

第一个文件:activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.listpractice.MainActivity" >   

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="false" 
    ></ListView>


</RelativeLayout>

第二个文件:row1.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight" >

 <ImageView
     android:id="@+id/icon"
     android:contentDescription="@string/hello_world"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_marginRight="10dp"
     android:layout_marginEnd="10dp"
     android:src="@drawable/ic_launcher" 
 />

 <TextView 
    android:id="@+id/firstTextView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:layout_toRightOf="@id/icon"
    android:layout_toEndOf="@id/icon"
    android:textSize="30sp"
    android:text="@string/hello_world"            
 />

 <TextView 
    android:id="@+id/secondTextView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"        
    android:layout_toRightOf="@id/icon"
    android:layout_toEndOf="@id/icon"   
    android:layout_below="@id/firstTextView"
    android:textSize="13sp"
    android:text="@string/hello_world"            
 />

</RelativeLayout>

第三个文件:MainActivity.java

package com.listpractice;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class MainActivity extends ListActivity {        

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     

    }
}

我的问题:现在我想显示row1.xml的数据,但我没有动态数据。如何使用第三个(.class)文件显示数据。

2 个答案:

答案 0 :(得分:0)

您应该阅读this article on Building Layouts with an Adapter。它有一些方便的概念,你需要了解它们。

根本的概念是,您需要将ListView与填充行的Adapter相关联,并将其添加到ListView

查看您的row1.xml,看起来您需要一组包含;

的对象
  • icon
  • 的图片
  • firstTextView
  • 的字符串
  • secondTextView
  • 的字符串

您可以构建一个小片段来创建一组预先填充的对象以供测试。

public class YourObject {
    private Bitmap icon;
    private String text1;
    private String text2;

    public YourObject(Bitmap icon, String text1, String text2) {
        this.icon = icon;
        this.text1 = text1;
        this.text2 = text2;
    }

    // GETTERS AND SETTERS
}

然后创建一个集合

    List<YourObject> data = new ArrayList<>();
    for (int z = 0; z < 5; z++) {
        YourObject yourObject = new YourObject(yourIcon, "Text1: " + z, "Text2: " + z);
        data.add(yourObject);
    }

收藏完成后,您将其发送到Adapter构造函数以及对row1.xml的引用,然后按照指南填充行。

答案 1 :(得分:0)

查看此链接有助于http://androidexample.com/Create_A_Simple_Listview_-_Android_Example/index.php?view=article_discription&aid=65&aaid=90

您需要创建适配器文件

公共类CustomBaseAdapter扩展了BaseAdapter {

Context context;
List<RowItem> rowItems;

public CustomBaseAdapter(Context context, List<RowItem> items) {
    this.context = context;
    this.rowItems = items;
}

/*private view holder class*/
private class ViewHolder {
    ImageView imageView;
    TextView txtTitle;
    //TextView txtDesc;
    ImageView imgarrow;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;

    LayoutInflater mInflater = (LayoutInflater)
        context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();
        //holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);
        holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
        holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
        holder.imgarrow=(ImageView)convertView.findViewById(R.id.arrow_icon);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }

    RowItem rowItem = (RowItem) getItem(position);

    //holder.txtDesc.setText(rowItem.getDesc());
    holder.txtTitle.setText(rowItem.getTitle());
    holder.imageView.setImageResource(rowItem.getImageId());
    holder.imgarrow.setImageResource(rowItem.getImg());

    return convertView;
}

@Override
public int getCount() {    
    return rowItems.size();
}

@Override
public Object getItem(int position) {
    return rowItems.get(position);
}

@Override
public long getItemId(int position) {
    return rowItems.indexOf(getItem(position));
}

}

MainActivity

公共类MainActivity扩展了Activity实现OnItemClickListener {

public static final String[] titles = new String[] { "Krish",
    "John Cena", "Kane","Roman Reigns"};



public static final Integer[] images = { R.drawable.fourth,R.drawable.second,R.drawable.first,R.drawable.third};
public static final Integer[] imagearow = {R.drawable.arrow,R.drawable.arrow,R.drawable.arrow,R.drawable.arrow };

ListView listView;
List<RowItem> rowItems;


private ImageView btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_item_home);
    //list_travels=(ListView)findViewById(R.id.list_travels);



    btn=(ImageView)findViewById(R.id.btnaddhotels);
    btn.setOnClickListener(new OnClickListener() 
    {

        @Override
        public void onClick(View arg0) 
        {
            Intent i=new Intent(HomeScreen.this,Registerhotel_resorts.class);
            startActivity(i);

        }
    });


    rowItems = new ArrayList<RowItem>();
    for (int i = 0; i < titles.length; i++) {
        RowItem item = new RowItem(images[i], titles[i],imagearow[i]);
        rowItems.add(item);
    }

    listView = (ListView) findViewById(R.id.list_hotels);
    CustomBaseAdapter adapter = new CustomBaseAdapter(this, rowItems);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(this);


}
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
        Toast toast = Toast.makeText(getApplicationContext(),
            "Item " + (position + 1) + ": " + rowItems.get(position),
            Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
        toast.show();

        Intent i1=new Intent(HomeScreen.this,KrishnaParkResort.class);
        startActivity(i1);
    }

}