2016-03-04 70 views
1

我在計算這個問題時遇到了很多麻煩。我想要做的是顯示一個不同的描述,這取決於我從列表視圖中點擊哪個項目。假設我選擇列表中的第三個配方。它應該切換到另一個活動並僅顯示該配方的描述,而不顯示任何其他配方。我在字符串文件夾中有說明。如何在列表視圖中顯示項目的文本Android Studio

在我的代碼中,它有一個偵聽器和一個打開其他活動的意圖。當我運行應用程序時,一旦我點擊列表中的項目,它就會關閉。之前,我沒有使用監聽器,而是使用了一種方法,並在xml中爲textview和image視圖添加了onClick。這將切換活動,但不會顯示任何說明。

public class MainActivity extends AppCompatActivity {           
private RecipesDataSource ds;                
private ListView recipesListView;               

@Override                     
protected void onCreate(Bundle savedInstanceState) {           
    super.onCreate(savedInstanceState);              
    setContentView(R.layout.activity_main);             
    ds = new RecipesDataSource();               
    recipesListView = (ListView)findViewById(R.id.listView1);        
    recipesListView.setAdapter(new RecipesDataSourceAdapter(this,ds));      
    recipesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {   
     @Override                   
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent i = new Intent(MainActivity.this, RecipesInfoActivity.class);    
      i.putExtra("recipe_desc", position);            
      startActivity(i);                
     }                     
    });                      
}                       

}           

這是我想讓描述出現的第二個活動。它有一個用於保存文本的文本視圖。

public class RecipesInfoActivity extends AppCompatActivity { 
TextView recipeInfo; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_recipes_info); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    recipeInfo = (TextView)findViewById(R.id.recipeInfoTextView); 
    Intent i = getIntent(); 
    String pos = i.getStringExtra("recipe_desc"); 
    recipeInfo.setText(writeDesc(pos)); 
} 

public int writeDesc(String pos) 
{ 
    int position = Integer.parseInt(pos); 
    int desc = 0; 
    if(position==0) 
    { 
     desc = R.string.description1; 
    } 
    else if(position==1) 
    { 
     desc = R.string.description2; 
    } 
    else if(position==2) 
    { 
     desc = R.string.description3; 
    } 
    else if(position==3) 
    { 
     desc = R.string.description4; 
    } 
    else if(position==4) 
    { 
     desc = R.string.description5; 
    } 
    else if(position==5) 
    { 
     desc = R.string.description6; 
    } 
    else if(position==6) 
    { 
     desc = R.string.description7; 
    } 
    return desc; 
} 

}              

根據位置writeDesc()返回描述的方法,從MainActivityputExtra()通行證。變量是整數,因爲我在整數中使用了ArrayList

請不要給我複雜的代碼,因爲我是Android Studio的新手。如果您有解決方案,請儘可能簡單。

總結我需要什麼幫助:

-Writes上的第二活動,這取決於項目從一個列表視圖點擊的說明。例如:如果我點擊雞肉的配方,它會顯示雞肉的配方(我將這些描述作爲字符串,因此您不需要擔心這一點。)

- 我應該使用聽衆還是在從列表視圖中單擊項目時調用的單獨方法(在xml中使用android:onClick="whatevermethodnamehere",而不是現在如何在具有偵聽器的主活動中)。由於某種原因,偵聽程序不會切換到下一個活動並崩潰,但onClick不會崩潰並切換,但未顯示說明。

回答

0

既然你已經想出了困難的部分,即使用ItemClickListener,我相信你只需要一些方向,所以在這裏。

基於位置,把不同的文本在您的intent.putExtra

例如而不是i.putExtra("recipe_desc", position); 使用此i.putExtra("key","recipe_desc");

現在它是由你決定如何做到這一點。我有兩種口味作爲快速建議 Flavor1:製作一個映射器類,將recipe_desc與正確的描述相映射。例如如果您在recipe_desc中收到「雞肉」,則此映射器類包含映射到它的雞肉。在activitB中,只需使用switch-case即可獲得正確的值

Flavor2:不是使用activityB中的映射器類,而是根據位置直接將描述放入您的intent.extra。現在只需顯示你從意圖中得到的任何東西。因此,在flavor2你switch-case移動到activityA

0

爲什麼不用writeDesc方法返回描述的字符串而不是整數。在我看來,你只是返回int值...

+0

因爲代碼下一個紅線,如果我將其更改爲字符串,我返回int。我認爲這是因爲我使用的數組列表包含描述是int。它適用於食物的名稱,但由於某種原因,它不適用於描述。 –

+0

你得到一個錯誤,因爲R.string.description會返回一個採訪。你需要做的是改變返回類型爲字符串,並與getResources替換R.string.description()的getString(R.string.description),這將返回所需的字符串值。另外,將desc的類型更改爲String –

相關問題