[英]Dynamic ListView in Android Studio: Selecting random element and update list view
public class MyWorkout extends AppCompatActivity {
Button addExercise
// Record how many clicks
int clickCounter=0;
private ListView mListView;
ArrayList<String> listItems = new ArrayList<String>()
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SetContentView(R.layout.activity_my_workout);
Toolbar MyWorkouttoolbar = (Toolbar) findViewById(R.id.MyWorkouttoolbar);
setSupportActionBar(MyWorkouttoolbar);
listItems.add("Power Clean");
listItems.add("Dead Lift");
listItems.add("Hang Clean");
listItems.add("Military Press");
listItems.add("Leg Press");
listItems.add("Squat");
listItems.add("Bench MAX");
listItems.add("Squat MAX");
listItems.add("Stair Stepper");
listItems.add("Treadmill");
listItems.add("Bike");
listItems.add("Elliptical");
listItems.add("Bicep Curls");
listItems.add("Dumb Bell Squats");
listItems.add("Goblet Squats");
listItems.add("Bar Bell Curls");
listItems.add("Bar Bell Bench Press");
listItems.add("Dumb Bell Bench Press");
listItems.add("Incline Bar Bell Bench Press");
listItems.add("Incline Dumb Bell Bench Press");
listItems.add("Decline Dumb Bell Bench Press");
listItems.add("Decline Bar Bell Bench Press");
listItems.add("Dumb Bell Lunges");
listItems.add("Bar Bell Lunges");
listItems.add("Dumb Bell Flys");
listItems.add("Tricep Push Downs");
if (mListView == null) {
mListView = (ListView) findViewById(R.id.MyWorkoutlistView);
}
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listItems);
setListAdapter(adapter);
addExercise = (Button) findViewById(R.id.addExercise);
addExercise.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Collections.shuffle(listItems);
adapter.getItem(4);
adapter.notifyDataSetChanged();
}
});
}
private void updateListView(){
ListView listView = (ListView)findViewById(R.id.MyWorkoutlistView);
}
// method which will handle dynamic insertion
public void addItems(View v) {
listItems.add("Clicked : "+clickCounter++);
adapter.notifyDataSetChanged();
}
protected ListView getListView(){
if (mListView==null){
mListView = (ListView) findViewById(R.id.MyWorkoutlistView);
}
return mListView;
}
protected void setListAdapter(ListAdapter adapter){
getListView().setAdapter(adapter);
}
protected ListAdapter getListAdapter(){
ListAdapter adapter = getListView().getAdapter();
if (adapter instanceof HeaderViewListAdapter){
return ((HeaderViewListAdapter)adapter).getWrappedAdapter();
} else {
return adapter;
}
}
我有一個填充練習的列表視圖。 我想隨機選擇一個數組中的元素,並將該隨機元素添加到另一個列表視圖中。
還可以更改原始練習列表視圖以僅顯示隨機元素嗎?
我是android studio的新手,所以如果我不清楚讓我知道,我會更好地解釋。 謝謝
以編程方式向自定義ListView添加/刪除項目。此示例演示如何在運行時使用Java代碼向/從自定義ListView添加/刪除項目。 請參閱此鏈接: http : //android-er.blogspot.in/2015/01/add-remove-items-to-custom-listview.html
編輯1: MainActivity.java
package com.example.androidimageviewlist;
import java.util.ArrayList;
import java.util.List;
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
public class Item {
Drawable ItemDrawable;
String ItemString;
Item(Drawable drawable, String t){
ItemDrawable = drawable;
ItemString = t;
}
}
static class ViewHolder {
ImageView icon;
TextView text;
}
public class ItemsListAdapter extends BaseAdapter {
private Context context;
private List<Item> list;
ItemsListAdapter(Context c, List<Item> l){
context = c;
list = l;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
// reuse views
if (rowView == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
rowView = inflater.inflate(R.layout.row, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.icon = (ImageView) rowView.findViewById(R.id.rowImageView);
viewHolder.text = (TextView) rowView.findViewById(R.id.rowTextView);
rowView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
holder.icon.setImageDrawable(list.get(position).ItemDrawable);
holder.text.setText(list.get(position).ItemString);
return rowView;
}
public List<Item> getList(){
return list;
}
}
List<Item> items1, items2;
ListView listView1, listView2;
ItemsListAdapter myItemsListAdapter1, myItemsListAdapter2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView1 = (ListView)findViewById(R.id.listview1);
listView2 = (ListView)findViewById(R.id.listview2);
initItems();
myItemsListAdapter1 = new ItemsListAdapter(this, items1);
myItemsListAdapter2 = new ItemsListAdapter(this, items2);
listView1.setAdapter(myItemsListAdapter1);
listView2.setAdapter(myItemsListAdapter2);
listView1.setOnItemClickListener(listOnItemClickListener);
listView2.setOnItemClickListener(listOnItemClickListener);
listView1.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
Item selectedItem = (Item)(parent.getItemAtPosition(position));
ItemsListAdapter associatedAdapter = (ItemsListAdapter) (parent.getAdapter());
List<Item> associatedList = associatedAdapter.getList();
Item associatedItem = associatedList.get(position);
if(removeItemToList(associatedList, associatedItem)){
view.invalidate();
associatedAdapter.notifyDataSetChanged();
ItemsListAdapter list2Adapter = (ItemsListAdapter) (listView2.getAdapter());
List<Item> list2List = list2Adapter.getList();
addItemToList(list2List, selectedItem);
list2Adapter.notifyDataSetChanged();
}
return true;
}});
}
OnItemClickListener listOnItemClickListener = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(MainActivity.this,
((Item)(parent.getItemAtPosition(position))).ItemString,
Toast.LENGTH_SHORT).show();
}
};
private void initItems(){
items1 = new ArrayList<Item>();
items2 = new ArrayList<Item>();
TypedArray arrayDrawable = getResources().obtainTypedArray(R.array.resicon);
TypedArray arrayText = getResources().obtainTypedArray(R.array.restext);
for(int i=0; i<arrayDrawable.length(); i++){
Drawable d = arrayDrawable.getDrawable(i);
String s = arrayText.getString(i);
Item item = new Item(d, s);
items1.add(item);
}
arrayDrawable.recycle();
arrayText.recycle();
}
private boolean removeItemToList(List<Item> l, Item it){
boolean result = l.remove(it);
return result;
}
private boolean addItemToList(List<Item> l, Item it){
boolean result = l.add(it);
return result;
}
}
修改activity_main.xml以擁有兩個ListView。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="4dp"
tools:context="com.example.androidimageviewlist.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:autoLink="web"
android:text="http://android-er.blogspot.com/"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@android:color/background_dark" >
<LinearLayout
android:id="@+id/pane1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="4dp"
android:background="@android:color/background_light"
android:orientation="vertical" >
<ListView
android:id="@+id/listview1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:id="@+id/pane2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="4dp"
android:background="@android:color/background_light"
android:orientation="vertical" >
<ListView
android:id="@+id/listview2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
我有一個填充練習的列表視圖。 我想隨機選擇一個數組中的元素,並將該隨機元素添加到另一個列表視圖中。
您可以:
Random.nextInt()
獲取數組中的隨機位置 arr[selectedPosition]
ListView
的適配器中,例如使用ArrayAdapter.add()
。 如果不使用ArrayAdapter
,則需要實現用於添加元素的界面,或者可以使用ListView.setAdapter()
創建和設置全新的適配器。
還可以更改原始練習列表視圖以僅顯示隨機元素嗎?
當然,但還有一些工作要做。 如果使用ArrayAdapter
,則只需clear()
適配器,然后僅add()
您要顯示的元素。 為了不丟失日期,您可以將所有練習保存在適配器外部的陣列/列表中。
如果您不使用ArrayAdapter
,並且想要實現自定義邏輯,請記住在修改后調用適配器上的notifyDataSetChanged()
,以便ListView
知道刷新自身。
在這里檢查我的答案我解釋了如何將動態元素添加到列表視圖中。
以防萬一...
private EditText editTxt;
private Button btn;
private ListView list;
private ArrayAdapter<String> adapter;
private ArrayList<String> arrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTxt = (EditText) findViewById(R.id.editText);
btn = (Button) findViewById(R.id.button);
list = (ListView) findViewById(R.id.listView);
arrayList = new ArrayList<String>();
// Adapter: You need three parameters 'the context, id of the layout (it will be where the data is shown),
// and the array that contains the data
adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, arrayList);
// Here, you set the data in your ListView
list.setAdapter(adapter);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// this line adds the data of your EditText and puts in your array
arrayList.add(editTxt.getText().toString());
// next thing you have to do is check if your adapter has changed
adapter.notifyDataSetChanged();
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.