ListView的优化

来源:互联网 发布:mysql怎么修改数据库名 编辑:程序博客网 时间:2024/06/14 20:10

效果图:点击item是弹出Toast,点击Test时也相应弹出Toast。此题目是是一家大公司的面试题,哥们几个去面试被坑了,当时写不出来怀疑有事件冲突,结果因为数据不是很大,没有冲突。直接上代码:

package com.example.listviewload;




import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity {

private ListView listview;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listView);

MyAdapter adapter=new MyAdapter();
listview.setAdapter(adapter);

listview.setOnItemClickListener(new OnItemClickListener() {


@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(MainActivity.this, "This Item is "+(position+1), 0).show();

}
});

}


class MyAdapter extends BaseAdapter{


@Override
public int getCount() {

return 1000;
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}


@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;

if(convertView == null){
convertView = View.inflate(MainActivity.this,R.layout.item, null);

viewHolder = new ViewHolder();
viewHolder.tv1 =  (TextView) convertView.findViewById(R.id.tv1);
viewHolder.tv2= (TextView) convertView.findViewById(R.id.tv2);
viewHolder.bt = (Button) convertView.findViewById(R.id.bt);

convertView.setTag(viewHolder);

}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tv1.setText("Title "+(position+1)+"");
viewHolder.tv2.setText("This item position is "+(position+1)+"");

/**
* Button设置点击事件
*/
viewHolder.bt.setFocusable(false);
viewHolder.bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

Toast.makeText(MainActivity.this, "This is buton"+(position+1), Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
}
static class ViewHolder{
TextView tv1;
TextView tv2;
Button bt;
}


}

布局:item.xm:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginLeft="5dp"
        android:id="@+id/ll"
        >
         <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tv1"
            android:text="textID"
            />
         <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tv2"
            android:text="text2" />
    </LinearLayout>
    
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text"
        android:id="@+id/bt"
        android:layout_alignParentRight="true"
        />
</RelativeLayout>


布局2:

<RelativeLayout 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"
    tools:context=".MainActivity" >


   <ListView 
       android:layout_height="wrap_content"
       android:layout_width="fill_parent"
       android:id="@+id/listView"
       ></ListView>


</RelativeLayout>


0 0
原创粉丝点击