ListViewItems打开相同的Activity但具有不同的内容

时间:2013-06-10 15:11:29

标签: android android-listview android-activity

我有一个ListView,可以从字符串文件中获取TutorialTitels,就像这样

public class tutorialActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tutorial);
        registerClickCallBack();
        ListView listView = (ListView) findViewById(R.id.tutorialList);

        String tutorialTitle1 = getResources().getString(R.string.tutorial1_title);
        String tutorialTitle2 = getResources().getString(R.string.tutorial2_title);
        String tutorialTitle3 = getResources().getString(R.string.tutorial3_title);
        String tutorialTitle4 = getResources().getString(R.string.tutorial4_title);
        String tutorialTitle5 = getResources().getString(R.string.tutorial5_title);
        String tutorialTitle6 = getResources().getString(R.string.tutorial6_title);
        String tutorialTitle7 = getResources().getString(R.string.tutorial7_title);
        String tutorialTitle8 = getResources().getString(R.string.tutorial8_title);
        String tutorialTitle9 = getResources().getString(R.string.tutorial9_title);
        String tutorialTitle10 = getResources().getString(R.string.tutorial10_title);
        String tutorialTitle11 = getResources().getString(R.string.tutorial11_title);
        String tutorialTitle12 = getResources().getString(R.string.tutorial12_title);
        String tutorialTitle13 = getResources().getString(R.string.tutorial13_title);
        String tutorialTitle14 = getResources().getString(R.string.tutorial14_title);

        String[] values = new String[] { tutorialTitle1, tutorialTitle2, tutorialTitle3, tutorialTitle4, tutorialTitle5, tutorialTitle6, tutorialTitle7, tutorialTitle8, tutorialTitle9, tutorialTitle10, tutorialTitle11, tutorialTitle12, tutorialTitle13, tutorialTitle14};

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);
        listView.setAdapter(adapter);
    }

    private void registerClickCallBack() {
        ListView list = (ListView) findViewById(R.id.tutorialList);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View viewClicked,int position, long id) {

        }
    });
}
}

当我点击listViewItem时,我想打开一个活动,它将显示以下内容:

  • 点击的TutorialTitel

  • 教程内容(这也来自一个字符串文件,就像这样 String tutorialContent1 = getResources().getString(R.string.tutorial1_content);

  • 教程示例((这也将来自一个字符串文件,如此 String tutorialExample1 = getResources().getString(R.string.tutorial1_example);))

我已经有一个像这样的XML文件

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:background="#FFFFFF"
            android:orientation="vertical"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp" >

            <TextView
                android:id="@+id/tutorialTitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Title"
                android:textSize="25sp" />

            <LinearLayout
                android:id="@+id/split"
                android:layout_width="fill_parent"
                android:layout_height="2dip"
                android:layout_marginBottom="15dp"
                android:layout_marginLeft="25dp"
                android:layout_marginRight="25dp"
                android:layout_marginTop="5dp"
                android:background="#38b34a"
                android:orientation="horizontal" />


            <TextView 
                android:id="@+id/tutorialContent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15sp"
                android:text=""/>


            <TextView 
                android:id="@+id/tutorialExample"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15sp"
                android:text=""/>


        </LinearLayout>
    </RelativeLayout>

</ScrollView>

问题:如何将数据传递到与我点击的ListviewItem相对应的活动?我应该做点什么

if(position == 0){
//Send data through extra bundle
}
else if(position == 1){
//send data through extra bundle
} 

但是我认为应该有更好的方式,但我不知道究竟是怎么回事,因为如果我得到100个教程怎么样我应该如何管理这样的列表呢? 有人能指出我正确的方向吗?最好的办法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用ListViewsetOnItemClickListener();添加一个监听器。此监听器回调将提供三个参数onItemClick (AdapterView<?> parent, View view, int position, long id),其中的位置将给出单击列表项的位置。

因此,使用此position,您可以将values[position]用作tutorialContenttutorialExample的相同内容,并将其传递到intent并启动Activity这个意图具有选定的项目数据

这是针对您的问题的快速解决方案。但我不建议,因为你实现的方式不是面向对象的标准。

我建议您为Tutorial创建一个具有成员变量标题,内容和示例的模型类。

Class Tutorial{
    private String title;
    private String content;
    private string example;
}

并在意图中传递此对象。

答案 1 :(得分:0)

首先将字符串保存在数组文件(array.xml)中。然后将它们读取为String数组;

String [] myresources=resources.obtainTypedArray(R.array.somelist);

    for(int i=0;i<NumberOfTutorials;i++){
        if(position==i){
            //send myresources[i];
     }

}

答案 2 :(得分:0)

您可以使用enum。例如,您可以像这样定义Tutorials枚举:

public enum Tutorials
{
    TUTORIAL_1(R.string.tutorial1_title, R.string.tutorial1_content, R.string.tutorial1_example),
    TUTORIAL_2(R.string.tutorial2_title, R.string.tutorial2_content, R.string.tutorial2_example),
    TUTORIAL_3(R.string.tutorial3_title, R.string.tutorial3_content, R.string.tutorial3_example);

    private int mTitleResourceId;
    private int mContentResourceId;
    private int mExampleResourceId;

    private Tutorials(int titleResourceId, int contentResourceId, int exampleResourceId)
    {
        mTitleResourceId = titleResourceId;
        mContentResourceId = contentResourceId;
        mExampleResourceId = exampleResourceId;
    }

    public int getTitleResourceId()
    {
        return mTitleResourceId;
    }

    public int getContentResourceId()
    {
        return mContentResourceId;
    }

    public int getExampleResourceId()
    {
        return mExampleResourceId;
    }
}

如果您愿意,可以在此枚举中定义100个教程。 然后在您的活动中,您可以通过以下方式使用它:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tutorial);
    ListView listView = (ListView) findViewById(R.id.tutorialList);

    List<String> titlesList = new ArrayList<String>();
    for (Tutorials tutorial: Tutorials.values())
    {
        titlesList.add(getResources().getString(tutorial.getTitleResourceId()));
    }
    String[] values = titlesList.toArray(new String[titlesList.size()]);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);
    listView.setAdapter(adapter);
}

最后点击列表中的单击项,您可以通过其字符串标题轻松检索Tutorial枚举,然后您将免费获得教程内容和教程示例。

设置此代码后,您只会将教程添加到Tutorials枚举,就是这样。

希望它有所帮助。当然,使用sqlite也是一种选择。