我正努力從自定義列表中獲取不止一個值。
由於getItem(int pos)
,我可以從中獲得「主」值,但由於我爲一行存儲了多個值(行的意思是CustomList
在TableView
中),我希望能夠獲得相應的值到我能夠拔出的標籤。從類擴展獲取ListView自定義朋友ArrayAdapter
我敢肯定,這比我做的更簡單,所以我希望以前有人做過。
我有一個CustomList
類,
public class CustomList extends ArrayAdapter<String>{
private final Activity context;
private final String[] labels;
private final Integer[] imageId;
private final String[] identifier;
public CustomList(Activity context,
String[] labels, Integer[] imageId, String[] id) {
super(context, R.layout.list_single, labels);
this.context = context;
this.labels = labels;
this.imageId = imageId;
this.identifier = id;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.list_single, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
TextView idTitle = (TextView) rowView.findViewById(R.id.identifier);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
txtTitle.setText(labels[position]);
idTitle.setText(identifier[position]);
imageView.setImageResource(imageId[position]);
return rowView;
}
public String getKey(int position, int category) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.list_single, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
TextView idTitle = (TextView) rowView.findViewById(R.id.identifier);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
if (category == 1) {
return idTitle.getText().toString();
} else if (category == 2) {
return "url:();";
} else {
return this.getItem(position);
}
}
}
注意:getKey
是越來越值超出這個ListView/CustomList
數據的累了,最後一次嘗試。
我不能因爲它的愛而以任何方式,形狀或形式調用該函數。
下面是我如何使用這個CustomList
,
CustomList adapter = new
CustomList(MainActivity.this, urls, images, identifiers);
list=(ListView)findViewById(R.id.listView1);
list.setAdapter(adapter);
相當直截了當,現在後面的代碼 - 更具體的一個按鈕 - 我想訪問存儲在表中的數據。
我做這樣做如下:
(這是我碰到一個腦筋急轉彎)
list=(ListView)findViewById(R.id.listView1);
ListView listView = (ListView)findViewById(R.id.listView1);
ListAdapter table = listView.getAdapter();
for(int i = 0; i < table.getCount(); i++){
Object row = table.getItem(i);
Log.i("Test", row.toString());
}
我走出這是CustomList.labels[i]
價值,這是不是所有的奇因爲我認爲這調用ArrayAdapter
的getItem
。
我試着在getItem
上做一個@Override
,但是因爲它只需要一個參數,那就是position
,我對Java的熟悉程度不夠,無法爲我工作。
任何想法我怎麼能得到listView1
的每個行項目的imageId
或identifier
變量?
如果你需要的list_single.xml
這是listView1
佈局(至少,這是我的這是什麼文件不解釋),那就是:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TableRow>
<ImageView
android:id="@+id/img"
android:layout_width="50dp"
android:layout_height="50dp"/>
<TextView
android:id="@+id/identifier"
android:layout_width="wrap_content"
android:visibility="invisible"
android:layout_height="50dp" />
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="50dp" />
</TableRow>
</TableLayout>
可以提高使用ViewHolder模式這一解決方案https://developer.android.com/training/improving-layouts/smooth-scrolling.html# ViewHolder或RecyclerView –
在問了一個愚蠢的問題後,我寫了一分鐘。這可能是一個很長的解決方法,但這裏是我做的:ArrayList itemsArrayList = new ArrayList (); CustomListAdapter moo = new CustomListAdapter(MainActivity.this,itemsArrayList); moo.getItem(0).getLabel();' - 如果有人想知道。 –
Torxed
好的不,我仍然不知道如何用實際的值來初始化它...如何/我在哪裏放置我的初始'String []標籤'例如? – Torxed