I am using list view in my android app. list view is working fine, but when I try to navigate to another activity on item click, my app crashes and shows message on emulator that your app has stopped unexpectedly.
Here is my onItemClick
code :
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
Intent i=new Intent(MainActivity.this,CityActivity.class);
i.putExtra("me","hello");
startActivity(i);
}
The code of my second activity:
public class CityActivity extends Activity {
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cityname);
text= (TextView)findViewById(R.id.textView1);
Intent intent = getIntent();
String message=intent.getStringExtra("me");
text.setText(message);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
XML code of second activity:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
The full code of my 1st activity:
public class MainActivity extends Activity implements OnItemClickListener {
ListView listview;
List<Country_Name> items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView)findViewById(R.id.list);
JSONObject main_obj=getjson();
items=new ArrayList<Country_Name>();
try {
JSONArray array=main_obj.getJSONArray("Country");
for(int i=0;i<array.length();i++) {
JSONObject obj=array.getJSONObject(i);
String name=obj.getString("Name");
String image_url=obj.getString("Image");
Country_Name country=new Country_Name(name,image_url);
JSONArray array_city=obj.getJSONArray("City");
for(int j=0;j<array_city.length();j++)
{
JSONObject obj2=array_city.getJSONObject(i);
country.items.add(new City_Name(obj2.getString("CName"),obj2.getString("CImage")));
}
this.items.add(country);
}
}
catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
CustomeBaseAdapter adapter=new CustomeBaseAdapter(this,this.items);
this.listview.setAdapter(adapter);
listview.setOnItemClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public JSONObject getjson() {
String json="";
StringBuilder builder=new StringBuilder();
JSONObject obj=null;
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(getAssets().open("Country.txt")));
String line="";
while((line=reader.readLine())!=null)
{
builder.append(line);
}
json=builder.toString();
obj=new JSONObject(json);
}
catch(Exception ex) {
ex.toString();
}
return obj;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
Intent i=new Intent(MainActivity.this,CityActivity.class);
i.putExtra("me","hello");
startActivity(i);
/*Toast toast = Toast.makeText(getApplicationContext(),"hello",
Toast.LENGTH_SHORT);
toast.show();*/
}
}
Assuming your "CustomBaseAdapter" class and jSONObject are ok, I should recommend you to log and debug to check where it fails. It seems the new activity is ok, so its failing on the call likely. You could try otherwise to use different way to make the call, at least as i like more:
hope it can helps!good luck