2014-10-17 51 views
0

我想在我的listView中選擇多個項目,並將它們發送到另一個listView點擊一個按鈕的活動。我會提供一些代碼,但我現在很無助,無法在任何地方找到答案。當我運行我的應用程序時,就UI而言,一切都看起來很好。與內部列表視圖我想在我的listView中選擇多個項目,並通過單擊按鈕將它們發送到另一個活動中的另一個listView

.xml文件:

<ListView 
    android:id="@+id/beerProduct" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="0.28" > 
</ListView> 

<Button 
    android:id="@+id/addtolist" 
    style="?android:attr/borderlessButtonStyle" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="75dp" 
    android:onClick="sendMessage" 
    android:text="@string/addtolist" 
    android:textSize="26sp" /> 

</LinearLayout> 

的.java調用列表視圖: 包com.practice.practiceapp1;

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

// Array of options --> Array Adapter --> ListView 

public class Beer<object> extends ActionBarActivity { 

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

    populateListView(); 
} 

private void populateListView() { 
    // create list of items 
    String[] beerItems = { "Miller Chill", "Miller Fortune", 
      "Miller Genuine Draft", "Miller High Life", 
      "Miller High Life Light", "Miller Lite", "Miller 64", 
      "Milwaukee\'s Best Ice", "Milwaukee\'s Best Light", 
      "Milwaukee\'s Best Premium" }; 

    // build adapter 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      R.layout.beer_items, beerItems); 

    // configure the ListView 
    final ListView list = (ListView) findViewById(R.id.beerProduct); 
    list.setAdapter(adapter); 
} 





@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.beer, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

} 

包含的.xml列表視圖屬性:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:minHeight="75dp" 
android:textSize="26sp" > 


</TextView> 

謝謝!
里根

+0

這很廣泛。你堅持哪部分?你應該首先重寫'OnItemSelected'。並看看[CHOICE_MODE_MUKTIPLE](http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:choiceMode) – codeMagic 2014-10-17 13:54:08

+0

搜索「CAB android」(是的,它可以用於support.v7 ) – Selvin 2014-10-17 14:09:48

回答

0

您必須實現

Parcelable

接口。該界面允許您在活動之間發送孔對象。 我想象你想要發送的對象是ArrayAdapter。 你可以在互聯網上找到很多教程來更好地理解機制。 在你有幾句話:

  1. 實現班上Parcelable接口描述要發送
  2. 發信人類中創建一個包,把parcelable到它,併發送對象作爲過渡

    Bundle newBundle = new Bundle(); 
        mBundle.putParcelable(A_KEY, YourObjectThatYouWantToSend); // the key is the identifier for the parcelable 
        newIntent.putExtras(newBundle); 
        startActivity(newIntent); 
    
  3. 之前額外的信息孔束接收對象在接收器的活動

    (YourObjectThatYouWantToSend)getIntent().getParcelableExtra(A_KEY); 
    
+0

謝謝!我也會嘗試CAB,看看最好,但現在,Parcelable正在工作。 – Reagan 2014-10-17 14:33:54

0

您應該創建一個自定義列表。因爲您必須保存列表中選定的值。您可以在自定義列表適配器的getView()方法中執行此操作。以下是您可以使用的自定義列表適配器。創建一個CustomArrayAdapter.java類。

public class CustomArrayAdapter extends ArrayAdapter<String> { 

private final Activity context; 
private final List<String> beerItems; 
private final List<String> selectedBeerItems = new ArrayList<String>(); 

public CustomArrayAdapter (Activity context, List<String> beerItems) { 

    super(context, R.layout.list_single_item, beerItems); 
    this.context = context; 
    this.beerItems= beerItems; 
} 

@Override 
public View getView(final int position, View view, ViewGroup parent) { 



    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView = inflater.inflate(R.layout.list_single_item, null, true); 

    TextView textView = (TextView) rowView.findViewById(R.id.list_single_item_text); 
    textView.setText(beerItems[position].toString()); 


    textView .setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      selectedBeerItems.add(beerItems[position]); 

     } 
    }); 


    return rowView; 
} 

public List<String> getSelectedBeerItems() { 
    return selectedBeerItems; 
} 


} 

這裏基本上它創建一個selectedBeerItems()列表,只增加了選擇的beerItems到該列表。現在,就行爲而言,您應該創建一個適配器並將其設置爲列表;

CustomArrayAdapter adapter = new CustomArrayAdapter(MainActivity.this, list); 
    list.setAdapter(adapter); 

您現在可以通過調用適配器內的方法來檢索活動中的選定項目。首先,您應該在您的活動中創建一個空列表,然後用適配器中的選定項目對其進行配對,如下所示。做你的活動。

List<String> selectedBeerItems = new ArrayList<String>(); 
    selectedBeerItems = adapter.getSelectedBeerItems(); 

現在你已經在你的活動方面選擇了啤酒項目。您可以將其發送給其他活動。

相關問題