定制视图适配器

时间:2015-08-10 13:16:01

标签: android

我观看了新的波士顿教程,并且有一些我不理解的东西。

我不明白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;
    }
}

1 个答案:

答案 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) 

将它们连接在一起可以为您提供正常运行的列表视图