2013-06-23 152 views
0

我想创建一个ListView点击一行,它会带你到一个页面的名称和其他细节。我花了很多时间试图使它工作,但目前我所拥有的只是点击该行将您带到一个空白页面。我搜索了很多问题,但没有一个人在新页面上添加标题!这里是我的列表视图活动:ListView似乎没有工作

package com.example.cookbook; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.view.View; 

public class SecondScreenActivity extends Activity 
{ 

    ArrayList<String> RecipeList; 
    public void onCreate(Bundle saveInstanceState) 
    { 
      super.onCreate(saveInstanceState); 
      setContentView(R.layout.main); 

      // Get the reference of ListViewRecipes 
      ListView RecipeListView=(ListView)findViewById(R.id.mainListView); 


      RecipeList = new ArrayList<String>(); 
      getRecipeNames(); 
      // Create The Adapter with passing ArrayList as 3rd parameter 
      ArrayAdapter<String> arrayAdapter =  
      new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, RecipeList); 
      // Set The Adapter 
      RecipeListView.setAdapter(arrayAdapter); 

      // register onClickListener to handle click events on each item 
      RecipeListView.setOnItemClickListener(new OnItemClickListener() 
       { 
         // argument position gives the index of item which is clicked 
         public void onItemClick(AdapterView<?> arg0, View v,int position, long arg3) 
         { 
          Intent i=new Intent(SecondScreenActivity.this, ThirdScreenActivity.class); 
          i.putExtra("position", position); 
          startActivity(i); 

          } 
       }); 
    } 

    void getRecipeNames() 
    { 
     RecipeList.add("Recipe1"); 
     RecipeList.add("Recipe2"); 
     RecipeList.add("Recipe3"); 
     RecipeList.add("Recipe4"); 
     RecipeList.add("Recipe5"); 
     RecipeList.add("Recipe6"); 
     RecipeList.add("Recipe7"); 
     RecipeList.add("Recipe8"); 
     RecipeList.add("Recipe9"); 
     RecipeList.add("Recipe10"); 



    } 
} 

这是我的新的一页活动:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.TextView; 

public class ThirdScreenActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.screen2); 

    TextView t = ((TextView)findViewById(R.id.textviewPosition)); 

    Intent intent = getIntent(); 
    String position = intent.getStringExtra("position"); 

    t.setText(position);   
} 

} 

和屏幕2是:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#ffffff"> 

<TextView 
    android:id="@+id/textviewPosition" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="#000000" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

</LinearLayout> 

我没有得到Eclipse或logcat的任何错误消息,这是当我点击时只显示一个空白页面! 感谢您的帮助

编辑:试图代替(位置)(将String.valueOf(位置)),现在说空的每一行。例如。在ThirdScreenActivity上:

TextView t = ((TextView)findViewById(R.id.textviewPosition)); 

    Intent intent = getIntent(); 
    String position = intent.getStringExtra("position"); 

    t.setText(String.valueOf(position)); 
+0

是奥雷克是正确的,只需调用Intent i = new Intent(SecondScreenActivity.this,ThirdScreenActivity.class); i.putExtra(“position”,position); startActivity(i);一旦。也看到你的screen2.xml是不是空白,或者是你想加载的这个xml fil –

+0

什么颜色的空白页? –

+0

白色(我很确定是我设置的screen2背景) – stackUnderflow

回答

0

你没有得到任何东西的原因是因为你传递了一个int。位置是一个int而不是一个额外的字符串,所以getStringExtra不会工作,因为extra是一个int。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    public void onItemClick(AdapterView<?> parent, View itemClicked, 
       int position, long id) { 

    TextView textView = (TextView) itemClicked; 
    String strText = textView.getText().toString(); 

    Intent i = new Intent(SecondScreenActivity.this, ThirdScreenActivity.class); 
    i.putExtra("position", strText); 
    startActivity(i); 
} 
}); 
+0

我曾想过int/string的东西,但我没有确定要做什么,我应该如何解决它?我试过getIntExtra,但只是给了错误。 – stackUnderflow

+0

是否要显示列表中项目的位置(即recipe4将为4)还是要将文本“recipe4”? – james

+0

理想情况下,它会是“recipe4”,但只是“4”将是一个好的开始,尽管我猜想会使用字符串,并且会使用int,因此它需要完全不同的编码。所以如果你有答案,“食谱4”将非常有帮助,谢谢 – stackUnderflow

0

首先,你为什么要创建相同的意图,并开始两次?
你只需要这样:

Intent i = new Intent(SecondScreenActivity.this, ThirdScreenActivity.class); 
i.putExtra("position", position); 
startActivity(i); 

编辑:

其次,你确定你的屏幕2中包含的可见元素?你应该发布你的XML

+0

我假设一个意图是改变活动,一个是发送额外的,谢谢你让我知道!并感谢您的快速答复,我会看看它是否工作,然后张贴屏幕2,如果不是 – stackUnderflow

+0

它没有改变任何东西,仍然是一个空白页 – stackUnderflow

0

的问题是,你传递一个int作为一个额外的:

i.putExtra("position", position); 

和接收的字符串:

Intent intent = getIntent(); 
String position = intent.getStringExtra("position"); 
t.setText(position); 

...所以你必须改变这两条线对于以下行...

Intent intent = getIntent(); 
int position = intent.getExtras().getInt("position"); 
t.setText(String.valueOf(position)); 

编辑:如果你想通过,则字符串做到这一点...

i.putExtra("position", String.valueOf(position)); 

......所以,你必须获得对其他活动的串...

Intent intent = getIntent(); 
String position = intent.getExtras().getString("position"); 
t.setText(position); 
+0

非常感谢,这解决了我的问题。我会将它标记为正确的答案,但詹姆斯目前正在将其改为字符串,这正是我的意图,我们将看看这是怎么回事! – stackUnderflow

+0

@ user2503325 ....非常感谢,解决了我的问题。我将其标记为正确的答案..... – jpardogo

+0

对不起,但詹姆斯先到那里:/ – stackUnderflow