我观看了新的波士顿教程,并且有一些我不理解的东西。
我不明白MainActicty如何知道要使用的CustomListView - 我们没有传递任何关于它的信息。 唯一的信息是我们在MainActivty上设置的上下文和字符串数组。 (https://www.youtube.com/watch?v=nOdSARCVYic&index=47&list=PL6gx4Cwl9DGBsvRxJJOzG4r4k_zLKrnxl 9:01)看起来他从custom_row中获取了数组的名称,但我检查了它,这是MainActivty。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String [] names = {"a"," b","c", "d", "e"};
ListAdapter elichaiAdapter = new CustomAdapter(this , names);
ListView elichaiListView = (ListView) findViewById(R.id.elichaiListView);
elichaiListView.setAdapter(elichaiAdapter);
elichaiListView.setOnItemClickListener(
new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//get the the value as string
String food = String.valueOf(parent.getItemAtPosition(position));
Toast.makeText(MainActivity.this , food , Toast.LENGTH_SHORT).show();
}
}
);
}
}
custom_row类
class CustomAdapter extends ArrayAdapter<String> {
CustomAdapter(Context context, String [] names) {
super(context, R.layout.coustem_raw, names );
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater elichaiInflater = LayoutInflater.from(getContext());
View customView = elichaiInflater.inflate(R.layout.coustem_raw, parent, false);
String nameItem = getItem(position);
TextView elichaiText = (TextView) customView.findViewById(R.id.elichaiTextView);
ImageView elichaiImage = (ImageView) customView.findViewById(R.id.elichaiImageView);
elichaiText.setText(nameItem);
elichaiImage.setImageResource(R.drawable.noname);
return customView;
}
}
答案 0 :(得分:0)
有什么困惑?
重要的一句就在这里:
ListAdapter elichaiAdapter = new CustomAdapter(this , names);
所以你告诉MainActivity使用你的CustomAdapter。您正在为它提供一个上下文和一个将填充列表视图的数组。
由于它是CustomAdapter的新实例,因此对其进行的任何更改都将特定于该实例。
然后,您将告诉listView在此处使用此自定义适配器:
elichaiListView.setAdapter(elichaiAdapter);
如果您想更改自定义适配器。您必须编辑或创建新实例,或者完全创建新的适配器,并在该适配器上运行上面的代码行。然后,您将通知列表视图已进行了更改。
所以我们有:
(CustomAdapter) (new CustomAdapter) (findViewById) .inflate(R.layout)
Adapter Class -> Adapter instance -> List View -> Layout (design)
将它们连接在一起可以为您提供正常运行的列表视图