2016-12-31 38 views
0

我正在使用兩個活動(ListActivity和DatabaseBaseActivity)並將兩個活動指向單個活動(DetailActivity)。我在兩個活動上都使用intent和putextra()將數組數據發送到DetailActivity。問題在於,我不知道如何區分單一活動中的不同意圖。這是我ListActivity代碼在單個活動中處理來自多個意圖的多個數據

我認爲問題主要在於其他if語句(我得到的NullPointerException)在DetailActivity和if語句工作正常

public class ListActivity extends AppCompatActivity { 

@Override 
public void onCreate(Bundle savedInstanceState){ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_view); 


    final ArrayList<AppName> appNames = new ArrayList<AppName>(); 

    appNames.add(new AppName("app1","description1")); 
    appNames.add(new AppName("app2","description2")); 
    appNames.add(new AppName("app3","description3")); 
    appNames.add(new AppName("app4","description4")); 
    appNames.add(new AppName("app5","description5")); 
    appNames.add(new AppName("app6","description6")); 
    appNames.add(new AppName("app7","description7")); 
    appNames.add(new AppName("app8","description8")); 
    appNames.add(new AppName("app9","description9")); 
    appNames.add(new AppName("app10","description10")); 

    AppAdapter adapter = new AppAdapter(this , appNames); 

    ListView listView = (ListView) findViewById(R.id.list); 

    listView.setAdapter(adapter); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
             @Override 
             public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 

              String[] appdescription = getResources().getStringArray(R.array.appdescriptionname); 
              final String appdescipl = appdescription[position]; 

              Intent intent1 = new Intent(getApplicationContext(), DetailActivity.class); 
              intent1.putExtra("des","mydes"); 
              intent1.putExtra("appdescipl" , appdescipl); 
              startActivity(intent1); 



             } 

    } 

    ); 



} 

這是我DatabaseBaseActivity代碼

public class DatabaseBaseActivity extends AppCompatActivity { 

@Override 
public void onCreate(Bundle savedInstanceState){ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_view); 


    final ArrayList<AppName> appNames = new ArrayList<AppName>(); 

    appNames.add(new AppName("appdata1","description1")); 
    appNames.add(new AppName("appdata2","description2")); 
    appNames.add(new AppName("appdata3","description3")); 
    appNames.add(new AppName("appdata4","description4")); 
    appNames.add(new AppName("appdata5","description5")); 
    appNames.add(new AppName("appdata6","description6")); 
    appNames.add(new AppName("appdata7","description7")); 
    appNames.add(new AppName("appdata8","description8")); 
    appNames.add(new AppName("appdata9","description9")); 
    appNames.add(new AppName("appdata10","description10")); 

    AppAdapter adapter = new AppAdapter(this , appNames); 

    ListView listView = (ListView) findViewById(R.id.list); 

    listView.setAdapter(adapter); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
             @Override 
             public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 

              String[] appdatadescription = getResources().getStringArray(R.array.appdatabasedescriptionname); 
              final String appdatadescipl = appdatadescription[position]; 

              Intent intent2 = new Intent(getApplicationContext(), DetailActivity.class); 
              intent2.putExtra("data" , "mydata"); 
              intent2.putExtra("appdatadescipl" , appdatadescipl); 

              startActivity(intent2); 



             } 
            } 

    ); 



} 

}

這是DetailActivity

public class DetailActivity extends Activity{ 

String description; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.detail_activity); 

    TextView descriptionofapp = (TextView)findViewById(R.id.descriptionofapp); 

    Bundle extras = getIntent().getExtras(); 

    if (extras.getString("des").equals("mydes") && extras!=null){ 

     description = extras.getString("appdescipl"); 
     descriptionofapp.setText(description); 
    } 

    else if (extras.getString("data").equals("mydata") && extras!=null){ 
     description = extras.getString("appdatadescipl"); 
     descriptionofapp.setText(description); 
    } 


} 

}

在此先感謝

+0

你可以看一下這個https://developer.android.com/reference/android/content/Intent.html#hasExtra(java.lang。字符串),如果它有幫助 – Raghunandan

+0

我不認爲這會導致任何功能問題 –

回答

0

試試這個,

Bundle extras = getIntent().getExtras(); 

if(extras.containsKey("des")){ 
    description = extras.getString("appdescipl"); 
    descriptionofapp.setText(description); 
} 
else if (extras.containsKey("data")){ 
    description = extras.getString("appdatadescipl"); 
    descriptionofapp.setText(description); 
} 

//...... conditions/check with unique key to differentiate from calling activity 
+0

感謝哥們......愛你 –

0

你不需要意圖區分。 getIntent()只是返回開始活動的意圖。嘗試這個 -

String description =null; 

description = getIntent().getStringExtra("appdescipl"); 

if(description==null) description = getIntent().getStringExtra("appdatadescipl"); 

descriptionofapp.setText(description); 
+0

謝謝你的答覆,但如果我不得不指導一些更多的活動detailactivity我能做什麼?任何想法 ?? ..在此先感謝 –

+0

請詳細說明。如果您想要將更多活動指向詳細的活動,只需在所有活動中聲明Intent的實例。那是你爲後兩次活動所做的,對嗎? –