我有一个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个教程怎么样我应该如何管理这样的列表呢? 有人能指出我正确的方向吗?最好的办法是什么?
答案 0 :(得分:1)
您可以使用ListView
向setOnItemClickListener();
添加一个监听器。此监听器回调将提供三个参数onItemClick (AdapterView<?> parent, View view, int position, long id)
,其中的位置将给出单击列表项的位置。
因此,使用此position
,您可以将values[position]
用作tutorialContent
和tutorialExample
的相同内容,并将其传递到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也是一种选择。