2013-01-19 91 views
0

我正在製作一個Android應用程序,並且在我的活動中,我執行了一個對數據庫的查詢並取得結果。我將結果和TextView添加到Activity中。我希望當我點擊TextView,傳遞給下一個活動餐廳的名稱,我點擊。我的代碼的問題是,它爲所有的TextViews保存最後一個餐廳的名稱。有任何想法嗎?謝謝!生成帶有循環的TextViews併爲每個生成點擊

public class ViewRestaurants extends Activity{ 
String name; 

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

DBAdapter db = new DBAdapter(this); 
db.open(); 

Cursor c = db.getSpRestaurants(getIntent().getStringExtra("city"), getIntent().getStringExtra("area"), getIntent().getStringExtra("cuisine")); 

View layout = findViewById(R.id.items); 

if(c.moveToFirst()) 
{ 
    do{ 
     name = c.getString(0); 
     TextView resname = new TextView(this); 
     TextView res = new TextView(this); 
     View line = new View(this); 

     resname.setText(c.getString(0)); 
     resname.setTextColor(Color.RED); 
     resname.setTextSize(30); 
     resname.setTypeface(null,Typeface.BOLD); 

     res.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
     res.setText(c.getString(1)+","+c.getString(2)+","+c.getString(3)+"\n"+c.getString(4)); 
     res.setTextSize(20); 
     res.setTextColor(Color.WHITE); 
     res.setClickable(true); 
     res.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(); 
       i.setClassName("com.mdl.cyrestaurants.guide", "com.mdl.cyrestaurants.guide.RestaurantDetails"); 
       i.putExtra("name",name); 
       startActivity(i); 
      } 
     }); 

     line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,2)); 
     line.setBackgroundColor(Color.RED); 

     ((LinearLayout) layout).addView(resname); 
     ((LinearLayout) layout).addView(res); 
     ((LinearLayout) layout).addView(line); 
    }while (c.moveToNext()); 

} 

    db.close(); 
} 

}

回答

0

你需要讓你的name最終你的循環中,爲了使用它在OnClickListener你的方式刪除它作爲一類領域。

if(c.moveToFirst()) 
{ 
    do{ 
     final String name = c.getString(0); 

     //other code ... 

     res.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(); 
       i.setClassName("com.mdl.cyrestaurants.guide", "com.mdl.cyrestaurants.guide.RestaurantDetails"); 
       i.putExtra("name",name); 
       startActivity(i); 
      } 
     }); 

     //more code... 

    }while (c.moveToNext()); 
} 
+0

謝謝,問題解決了:) – nestorasg

0

嘗試做了這些改變

String name = c.getString(0); 
resname.setText(name); 

它之所以被設定爲最後的餐廳名字是因爲字符串是通過引用而不是通過值,因爲它是一個傳入的對象。在do while循環的範圍內創建一個唯一的字符串應該解決這個問題。

+0

如果我這樣做然後onClick()函數不會識別「名稱」 – nestorasg