Android - 将项目从一个列表视图复制到另一个列表视图
我一直在研究这个Android项目,并一直在努力。我目前有两个列表视图,都显示数据。Android - 将项目从一个列表视图复制到另一个列表视图
我不确定如何将项目从一个列表视图复制到另一个项目单击时。
这里是我的代码:
public class MainActivity extends Activity {
private ListView mListView1, mListView2;
private String [] rock ={"The Beatles", "The Rolling Stones", "Jimi Hendrix", "Elvis Presley", "Pink Floyd", "AC/DC"};
private String [] pop ={"Michael Jackson", "Beyonce", "Rihanna", "Justin Bieber", "Lady Gaga", "Katy Perry"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView1 = (ListView)findViewById(R.id.listView1);
mListView2 = (ListView)findViewById(R.id.listView2);
mListView1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, rock));
mListView2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, pop));
ListUtils.setDynamicHeight(mListView1);
ListUtils.setDynamicHeight(mListView2);
}
public static class ListUtils {
public static void setDynamicHeight(ListView mListView) {
ListAdapter mListAdapter = mListView.getAdapter();
if (mListAdapter == null) {
// when adapter is null
return;
}
int height = 0;
int desiredWidth = MeasureSpec.makeMeasureSpec(mListView.getWidth(), MeasureSpec.UNSPECIFIED);
for (int i = 0; i < mListAdapter.getCount(); i++) {
View listItem = mListAdapter.getView(i, null, mListView);
listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
height += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = mListView.getLayoutParams();
params.height = height + (mListView.getDividerHeight() * (mListAdapter.getCount() - 1));
mListView.setLayoutParams(params);
mListView.requestLayout();
}
}
}
,然后我的main.xml:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dip" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="Rock" />
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:background="#B29090" >
</ListView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:gravity="center_vertical"
android:text="Pop" />
<ListView
android:id="@+id/listView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:background="#4A9C67" >
</ListView>
</LinearLayout>
例如,当甲壳虫乐队被点击我想喜欢它被复制到弹出列表视图。
我试过使用这个(下面的例子找到另一个答案),但它不会工作,因为它表示该列表视图没有add()或notifyDataSetChange()方法。
listView1.setOnItemClickListener(this);
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
datasListView2.add(valuesListView1.get(position));
listView2.notifyDataSetChange();
}
所以你有2个列表,摇滚和流行音乐吧?并且当您单击第一个listView(显示摇滚列表的项目)上的某个项目时,需要将该项目复制到第二个ListView(显示弹出列表的项目)。
您只需将该项添加到“弹出”列表,然后调用listview适配器上的notifyDataSetChange()。
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
pop.add(rock.get(position));
mListView2.getAdapter().notifyDataSetChange();
}
这应该是很容易的,但也许你不希望修改“啪”列表,并仅在适配器中所示的列表?
在这种情况下,您应该在每个适配器中存储数组副本,这样您就可以在不影响主列表的情况下对其进行修改。
为了实现这一点,您需要继承所使用的适配器。
希望这会有所帮助。
private String [] rock ={"The Beatles", "The Rolling Stones", "Jimi Hendrix", "Elvis Presley", "Pink Floyd", "AC/DC"};
private String [] pop ={"Michael Jackson", "Beyonce", "Rihanna", "Justin Bieber", "Lady Gaga", "Katy Perry"};
private List rocklist = new ArrayList();
private List poplist = new ArrayList();
private ArrayAdapter adapterRock;
private ArrayAdapter adapterPop;
private ListView mListView1;
private ListView mListView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for(String a : rock){
rocklist.add(a);
}
for (String b : pop){
poplist.add(b);
}
mListView1 = (ListView)findViewById(R.id.listView1);
mListView2 = (ListView)findViewById(R.id.listView2);
adapterRock = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, rocklist);
mListView1.setAdapter(adapterRock);
adapterPop = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, poplist);
mListView2.setAdapter(adapterPop);
mListView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
poplist.add(rocklist.get(position));
adapterPop.notifyDataSetChanged();
}
});
}
试过这个,但是当我点击一个项目时,它似乎没有做任何不同的事情。这两个列表视图保持不变 – jf95
我改变了它。 –
如果arrayList的模型不同,我们如何将组件从一种类型移动到另一种类型。 –
我不知道,但也许你应该做adapter.notifyDataSetChanged(); – Tuss