JSON配列を異なる結果で表示し、リストビューに表示する2つの異なるアクティビティを作成しました。
まず、メニュー アクティビティを作成して、ボタン (Button1 と Button2) でスイッチ アクティビティを制御します。
次に、2 つのアクティビティ クラス (Activity1 と Activity2) を作成して、JSON 配列をリストビューに表示します。
Button1 をクリックすると動作し、リストビューの Activity1 に JSON 配列が表示されます。
しかし、Button2 をクリックしても何も表示されません。
Activity2 のリストビュー項目が失われたのはなぜですか?
これが私のリストビューのプレースホルダーです(listviewplaceholder
):
<?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">
<ListView
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:drawSelectorOnTop="false" />
<TextView
android:id="@id/android:empty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""/>
<Button
android:id="@+id/buttonClose"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Close" />
</LinearLayout>
値を取得するための私のレイアウトは次のとおりです(wfid
):
<?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:padding="7dp"
>
<TextView
android:id="@+id/item_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:padding="2dp"
android:textSize="20dp" />
<TextView
android:id="@+id/item_subtitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="2dp"
android:textSize="13dp" />
</LinearLayout>
これが私のメニューアクティビティです(MenuActivity
):
public class MenuActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// TODO Auto-generated method stub
Button btnIndonesia = (Button) findViewById(R.id.button1);
Button btnMalaysia = (Button) findViewById(R.id.button2);
Button btnSingapore = (Button) findViewById(R.id.button3);
Button btnHongkong = (Button) findViewById(R.id.button4);
//Listening to button event
btnIndonesia.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
//Starting a new Intent
Intent indonesiaScreen = new Intent(getApplicationContext(), WeeklyFlashActivity.class);
startActivity(indonesiaScreen);
}
});
btnMalaysia.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
//Starting a new Intent
Intent malaysiaScreen = new Intent(getApplicationContext(), WeeklyFlashMyActivity.class);
startActivity(malaysiaScreen);
}
});
btnSingapore.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
//Starting a new Intent
Intent singaporeScreen = new Intent(getApplicationContext(), WeeklyFlashSgActivity.class);
startActivity(singaporeScreen);
}
});
btnHongkong.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
//Starting a new Intent
Intent hongkongScreen = new Intent(getApplicationContext(), WeeklyFlashHkActivity.class);
startActivity(hongkongScreen);
}
});
}
}
これはリストビューに JSON 配列を表示する私のアクティビティですWeeklyFlashActivity
(すべてのアクティビティは基本的に互いに類似しており、JSON を取得するための URL のみが異なります):
public class WeeklyFlashActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listplaceholder);
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
JSONObject json = JSONfunctions.getJSONfromURL("http://www.greenfields.co.id:502/Service1.svc/json/weeklyflash/id");
try
{
JSONArray weeklyflash = json.getJSONArray("GetReportResult");
for(int i=0;i<weeklyflash.length();i++)
{
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = weeklyflash.getJSONObject(i);
//map.put("type", String.valueOf(i));
map.put("type", e.getString("type"));
map.put("total", e.getString("total"));
mylist.add(map);
}
}
catch(JSONException e)
{
Log.e("log_tag", "Error parsing data "+e.toString());
}
ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.wfid,
new String[] { "type", "total" },
new int[] { R.id.item_title, R.id.item_subtitle });
setListAdapter(adapter);
Button btnClose = (Button) findViewById(R.id.buttonClose);
btnClose.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
//Closing SecondScreen Activity
finish();
}
});
}
}