Android 如何在listview中添加多重选择模式从JSON获取数据

Android 如何在listview中添加多重选择模式从JSON获取数据,android,android-listview,Android,Android Listview,我正在使用JSON将数据提取到listview中,但现在我需要使我的listview允许用户选择多个项目,并在底部显示“添加到订单”按钮,一旦用户完成复选框选择,现在想要进行该订单,只需单击“添加到订单”按钮,一旦用户将单击按钮,然后选择listview项目,我正在使用Intent即ResultActivity发送到下一个活动,但每当我运行我的应用程序时,应用程序就会停止,Logcat会说: 10-19 12:56:56.812: D/dalvikvm(709): GC_FOR_ALLOC

我正在使用JSON将数据提取到listview中,但现在我需要使我的listview允许用户选择多个项目,并在底部显示“添加到订单”按钮,一旦用户完成复选框选择,现在想要进行该订单,只需单击“添加到订单”按钮,一旦用户将单击按钮,然后选择listview项目,我正在使用Intent即ResultActivity发送到下一个活动,但每当我运行我的应用程序时,应用程序就会停止,Logcat会说:

   10-19 12:56:56.812: D/dalvikvm(709): GC_FOR_ALLOC freed 53K, 3% free 8069K/8259K, paused 43ms, total 45ms
10-19 12:56:56.812: I/dalvikvm-heap(709): Grow heap (frag case) to 8.514MB for 614416-byte allocation
10-19 12:56:56.882: D/dalvikvm(709): GC_CONCURRENT freed 1K, 3% free 8668K/8903K, paused 23ms+4ms, total 70ms
10-19 12:56:56.932: D/dalvikvm(709): GC_FOR_ALLOC freed 0K, 3% free 8668K/8903K, paused 30ms, total 30ms
10-19 12:56:56.964: I/dalvikvm-heap(709): Grow heap (frag case) to 9.832MB for 1382416-byte allocation
10-19 12:56:57.043: D/dalvikvm(709): GC_CONCURRENT freed 0K, 3% free 10018K/10311K, paused 36ms+5ms, total 83ms
10-19 12:56:57.293: D/gralloc_goldfish(709): Emulator without GPU emulation detected.
10-19 12:57:00.862: D/AndroidRuntime(709): Shutting down VM
10-19 12:57:00.862: W/dalvikvm(709): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
10-19 12:57:00.924: E/AndroidRuntime(709): FATAL EXCEPTION: main
10-19 12:57:00.924: E/AndroidRuntime(709): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.erachnida.restaurant.versionoct/com.erachnida.restaurant.versionoct.TabSample}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.erachnida.restaurant.versionoct/com.erachnida.restaurant.versionoct.MainActivity}: java.lang.NullPointerException
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.os.Looper.loop(Looper.java:137)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.ActivityThread.main(ActivityThread.java:4745)
10-19 12:57:00.924: E/AndroidRuntime(709):  at java.lang.reflect.Method.invokeNative(Native Method)
10-19 12:57:00.924: E/AndroidRuntime(709):  at java.lang.reflect.Method.invoke(Method.java:511)
10-19 12:57:00.924: E/AndroidRuntime(709):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-19 12:57:00.924: E/AndroidRuntime(709):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-19 12:57:00.924: E/AndroidRuntime(709):  at dalvik.system.NativeStart.main(Native Method)
10-19 12:57:00.924: E/AndroidRuntime(709): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.erachnida.restaurant.versionoct/com.erachnida.restaurant.versionoct.MainActivity}: java.lang.NullPointerException
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:1900)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:694)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.widget.TabHost.setCurrentTab(TabHost.java:358)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.widget.TabHost.addTab(TabHost.java:236)
10-19 12:57:00.924: E/AndroidRuntime(709):  at com.erachnida.restaurant.versionoct.TabSample.addTab(TabSample.java:48)
10-19 12:57:00.924: E/AndroidRuntime(709):  at com.erachnida.restaurant.versionoct.TabSample.setTabs(TabSample.java:27)
10-19 12:57:00.924: E/AndroidRuntime(709):  at com.erachnida.restaurant.versionoct.TabSample.onCreate(TabSample.java:23)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.Activity.performCreate(Activity.java:5008)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
10-19 12:57:00.924: E/AndroidRuntime(709):  ... 11 more
10-19 12:57:00.924: E/AndroidRuntime(709): Caused by: java.lang.NullPointerException
10-19 12:57:00.924: E/AndroidRuntime(709):  at com.erachnida.restaurant.versionoct.MainActivity.onCreate(MainActivity.java:39)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.Activity.performCreate(Activity.java:5008)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
10-19 12:57:00.924: E/AndroidRuntime(709):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
10-19 12:57:00.924: E/AndroidRuntime(709):  ... 23 more
MainActivity.java:-

public class MainActivity extends Activity implements OnItemClickListener, OnClickListener {
    Button button;
ListView lview3;
ListViewCustomAdapter adapter;
private ArrayList<Object> itemList;
private ItemBean bean;

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


    prepareArrayLits();
    lview3 = (ListView) findViewById(R.id.listView1);
    adapter = new ListViewCustomAdapter(this, itemList);
    lview3.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    lview3.setAdapter(adapter);

    lview3.setOnItemClickListener(this);
    button.setOnClickListener((OnClickListener) this);
}

private void findViewsById() {
    lview3 = (ListView) findViewById(R.id.listView1);
    button = (Button) findViewById(R.id.submit);
}

public void onClick(View v) {
    SparseBooleanArray checked = lview3.getCheckedItemPositions();
    ArrayList<String> selectedItems = new ArrayList<String>();
    for (int i = 0; i < checked.size(); i++) {
        // Item position in adapter
        int position = checked.keyAt(i);
        // Add sport if it is checked i.e.) == TRUE!
        if (checked.valueAt(i))
            selectedItems.add((String) adapter.getItem(position));
    }
    String[] outputStrArr = new String[selectedItems.size()];

    for (int i = 0; i < selectedItems.size(); i++) {
        outputStrArr[i] = selectedItems.get(i);
    }

    Intent intent = new Intent(getApplicationContext(),
            ResultActivity.class);

    // Create a bundle object
    Bundle b = new Bundle();
    b.putStringArray("selectedItems", outputStrArr);

    // Add the bundle to the intent.
    intent.putExtras(b);

    // start the ResultActivity
    startActivity(intent);
}
   public class ResultActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);

        Bundle b = getIntent().getExtras();
        String[] resultArr = b.getStringArray("selectedItems");
        ListView lv = (ListView) findViewById(R.id.outputList);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, resultArr);
        lv.setAdapter(adapter);
    }
}
public类MainActivity扩展了活动实现OnItemClickListener、OnClickListener{
按钮;
ListView lview3;
ListViewCustomAdapter适配器;
私有arraylistitemlist;
私家菜豆;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
制备耳石();
lview3=(ListView)findViewById(R.id.listView1);
adapter=新ListViewCustomAdapter(此,itemList);
lview3.setChoiceMode(ListView.CHOICE\u MODE\u MULTIPLE);
lview3.setAdapter(适配器);
lview3.setOnItemClickListener(此);
setOnClickListener((OnClickListener)this);
}
私有void findViewsById(){
lview3=(ListView)findViewById(R.id.listView1);
按钮=(按钮)findViewById(R.id.submit);
}
公共void onClick(视图v){
SparseBooleanArray checked=lview3.getCheckedItemPositions();
ArrayList selectedItems=新建ArrayList();
对于(int i=0;i
ResultActivity.java:-

public class MainActivity extends Activity implements OnItemClickListener, OnClickListener {
    Button button;
ListView lview3;
ListViewCustomAdapter adapter;
private ArrayList<Object> itemList;
private ItemBean bean;

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


    prepareArrayLits();
    lview3 = (ListView) findViewById(R.id.listView1);
    adapter = new ListViewCustomAdapter(this, itemList);
    lview3.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    lview3.setAdapter(adapter);

    lview3.setOnItemClickListener(this);
    button.setOnClickListener((OnClickListener) this);
}

private void findViewsById() {
    lview3 = (ListView) findViewById(R.id.listView1);
    button = (Button) findViewById(R.id.submit);
}

public void onClick(View v) {
    SparseBooleanArray checked = lview3.getCheckedItemPositions();
    ArrayList<String> selectedItems = new ArrayList<String>();
    for (int i = 0; i < checked.size(); i++) {
        // Item position in adapter
        int position = checked.keyAt(i);
        // Add sport if it is checked i.e.) == TRUE!
        if (checked.valueAt(i))
            selectedItems.add((String) adapter.getItem(position));
    }
    String[] outputStrArr = new String[selectedItems.size()];

    for (int i = 0; i < selectedItems.size(); i++) {
        outputStrArr[i] = selectedItems.get(i);
    }

    Intent intent = new Intent(getApplicationContext(),
            ResultActivity.class);

    // Create a bundle object
    Bundle b = new Bundle();
    b.putStringArray("selectedItems", outputStrArr);

    // Add the bundle to the intent.
    intent.putExtras(b);

    // start the ResultActivity
    startActivity(intent);
}
   public class ResultActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);

        Bundle b = getIntent().getExtras();
        String[] resultArr = b.getStringArray("selectedItems");
        ListView lv = (ListView) findViewById(R.id.outputList);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, resultArr);
        lv.setAdapter(adapter);
    }
}
公共类结果性扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
Bundle b=getIntent().getExtras();
String[]resultArr=b.getStringArray(“selectedItems”);
ListView lv=(ListView)findViewById(R.id.outputList);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,resultar);
低压设置适配器(适配器);
}
}
活动主要:-

<Button
    android:id="@+id/submit"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:text="Add to Order" />

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/header"
    android:layout_marginBottom="10dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="20dp"
    android:cacheColorHint="#00000000"
    android:divider="#00000000"
    android:dividerHeight="20dp" 
    android:layout_above="@id/submit"
    >

</ListView>

选项卡示例:-

   public class TabSample extends TabActivity {
    /** Called when the activity is first created. */

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tabmain);
        setTabs() ;
    }
    private void setTabs()
    {
        addTab("Menu", R.drawable.tab_home, MainActivity.class);
        addTab("Offers", R.drawable.tab_search, MainActivity.class);

        addTab("Location", R.drawable.tab_home, ArrowsActivity.class);
        addTab("Reservation", R.drawable.tab_search, ReservationActivity.class);
    }

    private void addTab(String labelId, int drawableId, Class<?> c)
    {
        TabHost tabHost = getTabHost();
        Intent intent = new Intent(this, c);
        TabHost.TabSpec spec = tabHost.newTabSpec("tab" + labelId); 

        View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);
        TextView title = (TextView) tabIndicator.findViewById(R.id.title);
        title.setText(labelId);
        ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon);
        icon.setImageResource(drawableId);

        spec.setIndicator(tabIndicator);
        spec.setContent(intent);
        tabHost.addTab(spec);
    }
}
public类TabSample扩展了TabActivity{
/**在首次创建活动时调用*/
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.tabmain);
setTabs();
}
私有void setTabs()
{
addTab(“菜单”,R.drawable.tab_home,MainActivity.class);
addTab(“提供”,R.drawable.tab_搜索,MainActivity.class);
addTab(“位置”,R.drawable.tab_home,ArrowsActivity.class);
addTab(“Reservation”,R.drawable.tab_search,ReservationActivity.class);
}
私有void addTab(字符串labelId,int-drawableId,c类)
{
TabHost TabHost=getTabHost();
意向=新意向(本,c);
TabHost.TabSpec spec=TabHost.newTabSpec(“tab”+labelId);
查看tabIndicator=LayoutInflater.from(this).充气(R.layout.tab_indicator,getTabWidget(),false);
TextView title=(TextView)tabIndicator.findViewById(R.id.title);
标题:setText(labelId);
ImageView图标=(ImageView)选项卡indicator.findViewById(R.id.icon);
icon.setImageResource(drawableId);
规格设置指示器(tabIndicator);
规格设置内容(意图);
tabHost.addTab(spec);
}
}

您的TabSample类在哪里……。第48、27、23行是什么?TabSample活动只包含31行,title.setText(labelId);=23linefriend如果您没有编辑代码,那么必须有第48行……您的日志显示TabSample.addTab(TabSample.java:48)……或者,如果您已编辑,则也可以编辑日志。如果无法查看行号,请转到窗口->首选项->常规->编辑器->文本编辑器->显示行号。