繁体   English   中英

在Android中动态创建多个ListView

[英]Dynamically Creating Multiple ListViews in Android

我目前正在开发使用android开发的基本新闻聚合应用程序,我知道那里有很多负载,但是我基本上只是在创建一个应用程序,因为我认为对于刚开始Android开发的人来说,这是一个不错的起点。

我的目标是显示来自多个提要的文章。 每个提要都会有自己的水平滑动列表,有点像脉冲新闻应用程序。 到目前为止,我设法找到了有关创建“ Horizo​​ntalListView”的教程,现在我的应用程序显示了基本的水平滑动listview,如下所示:

截图链接: http : //www.dev-smart.com/wp-content/uploads/2011/03/device-200x300.png

Pulse App屏幕截图: http : //a1525.phobos.apple.com/us/r1000/080/Purple/v4/ba/6a/01/ba6a01d1-f0b7-4bb7-3f94-5a5761653e3c/mzl.zxnjzzmk.480x480-75。 JPG

码:

public class HorizontalListViewDemo extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.listviewdemo);

    HorizontalListView listview = (HorizontalListView) findViewById(R.id.listview);
    listview.setAdapter(mAdapter);


}

private static String[] dataObjects = new String[]{ "Text #1",
    "Text #2",
    "Text #3", "Text #4"  }; 

private BaseAdapter mAdapter = new BaseAdapter() {

    private OnClickListener mOnButtonClicked = new OnClickListener() {

        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(HorizontalListViewDemo.this);
            builder.setMessage("hello from " + v);
            builder.setPositiveButton("Cool", null);
            builder.show(); 
        }
    };

    @Override
    public int getCount() {
        return dataObjects.length;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View retval = LayoutInflater.from(parent.getContext()).inflate(R.layout.viewitem, null);
        TextView title = (TextView) retval.findViewById(R.id.title);
        Button button = (Button) retval.findViewById(R.id.clickbutton);
        button.setOnClickListener(mOnButtonClicked);
        title.setText(dataObjects[position]);
        return retval;
    }   
};
}

XML:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:background="#000"
  >

  <com.devsmart.android.ui.HorizontalListView
    android:id="@+id/listview"
    android:layout_width="fill_parent"
    android:layout_height="250dp"
    android:background="#ddd"
  />

</LinearLayout>
</ScrollView>

正如我提到的,每个Horizo​​ntalListView将代表1个Feed,并显示其相关的文章,如上所述。 因此,我在此开发中的下一步是尝试动态创建这些Horizo​​ntalListView,以便用户可以在应用程序内声明供稿,然后在已定义的供稿下动态创建供稿。

忽略该过程中涉及的所有其他工作,我实际上只是在寻求帮助以创建一个新的Horizo​​ntalListView,以回收已定义的XML listview布局id =“ listview”。 我知道,如果我在哪里预定义所有提要并仅创建具有唯一ID的唯一XML布局,我就能使它起作用,但是我想知道是否有一种方法可以定义一个可重用现有布局的新Horizo​​ntalListView。

我希望你们能为我提供一些启示。

谢谢

更新1:使用视图?

//Defining main XML file "listviewdemo.xml"
setContentView(R.layout.listviewdemo);
//Creating a new view to apply to my HorizontalListViews, /res/layout/listviewStyle.xml
View view = getLayoutInflater().inflate(R.layout.listviewStyle, null);

//Defining my first HorizontalListView      
HorizontalListView listview = (HorizontalListView) view.findViewById(R.id.listviewReuse);
listview.setAdapter(mAdapter);
HorizontalListView listview = (HorizontalListView) findViewById(R.id.listview);

该行将始终返回使用R.id.listview找到的第一个视图。 当您有多个列表视图时,效果不是很好。

现在,在子视图上调用findViewById()而不是调用Activity.findViewById()。 您可以在布局内部包含每个listview。 然后调用findViewById以查找作为listview父级的布局。 在布局上调用findViewById。

第一次找到listView后,请记住它以备后用。

在您发布的更新代码中,删除此行。 它没有做任何事情,该视图与布局R.layout.listviewdemo无关。

View view = getLayoutInflater().inflate(R.layout.listviewStyle, null);

然后在R.layout.listviewdemo的xml中,将两个列表视图添加到同一.xml中(假设这是您的目标)。 无论哪种情况,您都应该将所有视图添加到同一布局,然后使用findViewById检索视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM