@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tx=new TextView(parent.getContext());
//在代码中创建了tx就不用在xml中创建并且在代码中find了。
tx.setText(arr.get(position));
新建的继承了Listview的类,如果你在xml文件中去“导包”使用它的话,那么在构造方法中一定要使用含有attibuteset的构造函数!(虽然你不用它它编译的时候不会报错!)否则报错!报错的!!运行时错误!(指向main中的setcontentview方法)
使用继承自某类的自定义控件的时候,三部:xml导包,在main_activity处正常使用此控件。private 自定义 mm。mm=(自定义)find....
android:indeterminateDrawable="@drawable/shape_progress"可以在drawable中自定义xml文件设置款式~
在自定义的复合复杂view中,如果想要find自定义view的Layout的某控件,前面要加上该view的名字.view.findViewByID()
用view.setPadding去设置下拉框的隐藏高度,利用getHeight(在屏幕上显示的真实高度,如果没有显示出来就用不了)或者getMeasureHeight(真实的高度,无论有没有在屏幕上显示)测量的时候发现都是0的原因:
我初始化view的时候是在自定义的继承了Listview的下拉类中的构造中进行的,而这个构造又是在main的setcontentview中进行的,这个时候还没有进行渲染(onmeasure\ondraw没执行,在onresume之后才执行)。所以我们要提前手动测量。
view.measure(0,0),就能得到measureheight,height还是没有。。
view.measure(0,0);
viewheight=view.getMeasuredHeight();
ontouch里面
return super.onTouchEvent(ev);
@Override
public boolean onTouchEvent(MotionEvent ev) {
pianyi=(int)(moveint-downint);
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downint = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
moveint = ev.getY();
view.setPadding(0, -viewheight + pianyi, 0, 0);
if(pianyi>viewheight) return super.onTouchEvent(ev);
break;
case MotionEvent.ACTION_UP:
upint = ev.getY();
break;
default:
break;
}
haha();
return super.onTouchEvent(ev);
}
我在haha()方法里面加了
if(pianyi<viewheight) view.setPadding(0,-viewheight,0,0);
else view.setPadding(0,0,0,0);
然而,这样子很容易导致无法拖动到很远的地方,一符合else,它就立刻“弹”成0,0,0,0的样子了,根本不管我们是否正在下拉,这种体验很不好。所以我们可以在case里面直接判断,当满足条件的时候直接提前return。(这样也可以防止有的人无数次拉刷新)
我个人理解的监听回调方法是:在自定义类中,如果满足了某个条件需要监听可以发生变动的,可以在下面写上
if(listener!=null) listener.method();//这里的method是调用了接口里面的某方法!感觉已经是固定写法了。
如果监听到“刷新”状态,就会在调用监听的main中重新加载一些东西拉,当然啊,adapter中是不可以直接添加的,要通知它我们添加了元素!
@Override
public void onRefresh() {
new Thread(){
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
listDatas.add(0,"我是下拉刷新出来的数据!");
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
自定义.onRefreshComplete();//不加这个的话就会在加载完数据的时候下拉刷新列表不隐藏,所以要在自定义中自创一个方法,让状态回到最初隐藏~
}
});
};
}.start();
}
下拉加载可以直接实现onscrollListener接口
setSelection(getCount()); // 跳转到最后一条, 使其显示出加载更多.(不太懂)
如果没有这个那么在下拉的时候可能看不到 加载更多 ,虽然它的确有
这个代码挺好玩的~~很值得借鉴!