findViewbyid()出现空指针

youdiving 2013-05-04 07:00:07
我想在MyView类里面给MainActivity里面的textview赋值
public class MyView extends View {
TextView txtview;
//LinearLayout linear1;
ListView listv; public MyView(Context context, AttributeSet attrs) {
super(context, attrs);

txtview=(TextView)findViewById(R.id.text1);
if(txtview==null)
System.out.println("txtview is null");
// linear1=(LinearLayout)findViewById(R.id.linear1);
listv=(ListView)findViewById(R.id.listview1);
if(listv==null)
System.out.println("listv is null");

//logcat里面显示txtview和listv均为空 }

@SuppressLint("DrawAllocation")
@SuppressWarnings("static-access")
@Override
protected void onDraw(Canvas canvas) {

super.onDraw(canvas);
canvas.drawColor(0x00FFFFFF);
Paint bmpPaint=new Paint();
canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);
//canvas.drawPath(path, bmpPaint);
canvas.save(canvas.ALL_SAVE_FLAG);
canvas.restore();
}

@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
@Override
public boolean onTouchEvent(MotionEvent event) {
int x=(int)event.getX();
int y=(int)event.getY();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
flag=true;
startX=x;
startY=y;
loc.clear();
path.moveTo(x,y);

break;
case MotionEvent.ACTION_MOVE:
if(flag)
{
path.moveTo(x,y);
path.lineTo(x,y);
cacheCanvas.drawLine(startX,startY,x,y,paint);
startX=x;
startY=y;
loc.add(new Point(startX,startY));
}

break;
case MotionEvent.ACTION_UP:
path.reset();
bhnum++;
pic=new int[this.view_height][this.view_width];
for(int i=0;i<pic.length;i++)
for(int j=0;j<pic[i].length;j++)
pic[i][j]=0;
flag=false;
for(int i=0;i<loc.size();i++)
{
Point st=(Point)loc.get(i);
if(st.x>=this.view_width|| st.x<0|| st.y>=this.view_height||st.y<0)
{
continue;
}
int sty=st.y;
int stx=st.x;
pic[sty][stx]=1;
pics[sty][stx]=1;
}
ArrayList aa=new ArrayList();
aa=ljshibie();
Log.i("after ljshibie",aa.toString());
ArrayList bb=new ArrayList();Log.i("afterbb","can excute!");
bb=tjshibie();
Log.i("after tjshibie",bb.toString());
ccs=PutResult(aa,bb);
if( ccs !=null &&ccs.size()>0)
{
CharSequence cs=(String)ccs.get(0);Log.i("匹配字1",cs.toString());
txtview.setText(cs);//给textview赋值 Log.i("匹配字2",cs.toString());
...... }
break;

}
invalidate();
return true;
}
}
...全文
344 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
youdiving 2013-05-05
  • 打赏
  • 举报
回复
thank you a lot
aid2013 2013-05-05
  • 打赏
  • 举报
回复
在MyView是获取不到txtview,listv 在MainActivity才能获取到txtview,listv。 可以这样:

public class MainActivity extends Activity
{
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		txtview=(TextView)findViewById(R.id.text1);
		listv=(ListView)findViewById(R.id.listview1);
	}

	public void setTextView(String txt)
	{
		txtview.setText(txt);
	}
}

public class MyView extends View 
{
	MainActivity ay;
	public MyView(Context context, AttributeSet attrs) 
	{
		super(context, attrs);
		ay = (MainActivity) context;
		...
	}

	public boolean onTouchEvent(MotionEvent event) 
	{
        ...
        ay.setTextView("test");
        ...
	}
}
youdiving 2013-05-04
  • 打赏
  • 举报
回复
这是关于手写输入的,有联机和脱机,很多方法没有贴,代码太多了,但可以确定的是上面说的问题引发了异常
youdiving 2013-05-04
  • 打赏
  • 举报
回复
public class MainActivity extends Activity { MyView myview1 ; public static Point store=new Point(); //public static ArrayList<Point> loc=new ArrayList<Point>() ;//记录笔画坐标 private MyOpenHelper myopenhelper; public static TextView txtview; public static ListView listv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = (Button)findViewById(R.id.testsqlite); //txtview=(TextView)findViewById(R.id.text1); //listv=(ListView)findViewById(R.id.listview1); if(button1==null) { Log.i("buttonnull","can excute!"); } myopenhelper = new MyOpenHelper(this); button1.setOnClickListener(new ClickEvent()); Log.i("Oncreate","can excute!"); myview1 = (MyView) findViewById(R.id.drawview1); } Bihua bihua; Word word; Zib zib; ZiYinYi ziyinyi; public class ClickEvent implements OnClickListener { @Override public void onClick(View v) { SQLiteDatabase db = myopenhelper.getReadableDatabase(); db.execSQL("delete from Word where 字体=null"); db.close(); /*if(MyView.ccs!=null) { MyView.ccs.clear(); } MyView.bh=""; if(MyView.loc!=null) { MyView.loc.clear(); } if(MyView.cacheCanvas !=null) { Paint tmpaint=new Paint(); tmpaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); MyView.cacheCanvas.drawPaint(tmpaint); tmpaint.setXfermode(new PorterDuffXfermode(Mode.SRC)); myview1.setBackgroundColor(Color.TRANSPARENT); myview1.invalidate(); } MyView.bhnum=0; MyView.newpoints=new int [myview.getHeight()][myview.getWidth()]; MyView.allpoints=new int[myview.getHeight()][myview.getWidth()]; Log.i("MaintActivity","can excute!"); }*/ } } } public class MyView extends View { public static int startX; public static int startY; public static boolean flag; public static int bhnum=0; public static int pic[][];//存储单笔的坐标 public static int pics[][];//存储整个字的笔画坐标 public static int features []; public static ArrayList alist;//存储斜率, 方向,笔画等 public static ArrayList<Point> loc=new ArrayList<Point>();//记录笔画坐标 public static ArrayList<Point> newloc=new ArrayList<Point>();//处理后的坐标 public static int newpoints[][];//处理后鼠标轨迹 public static int allpoints [][];//整个字的鼠标轨迹 public static double s;//笔画长度 public static boolean t;//判断笔画方向 public static String bh="";//字的总笔画编码 public static char zm; public static ArrayList<zi> listzi=new ArrayList<zi>();//联机识别的排序结果 public static int x;//字宽 public static int y;//字高 public static ArrayList ccs=new ArrayList(); public static DataBaseHelper dbhelp; public static SQLiteDatabase db; private int view_width = 0; private int view_height = 0; private float preX; private float preY; public static Path path=null; public static Paint paint=null; public static Bitmap cacheBitmap=null; public static Canvas cacheCanvas=null; TextView txtview; //LinearLayout linear1; ListView listv; public MyView(Context context, AttributeSet attrs) { super(context, attrs); txtview=(TextView)findViewById(R.id.text1); if(txtview==null) System.out.println("txtview is null"); // linear1=(LinearLayout)findViewById(R.id.linear1); listv=(ListView)findViewById(R.id.listview1); if(listv==null) System.out.println("listv is null"); dbhelp=new DataBaseHelper(context); view_width=context.getResources().getDisplayMetrics().widthPixels; view_height=context.getResources().getDisplayMetrics().heightPixels; Log.i(String.valueOf(this.view_width),String.valueOf(this.view_height)); System.out.println(view_width+"*"+view_height); pics=new int[this.view_height][this.view_width]; allpoints=new int[view_height][view_width]; for(int i=0;i<pics.length;i++) for(int j=0;j<pics[i].length;j++) pics[i][j]=0; cacheBitmap=Bitmap.createBitmap(view_width, view_height, Config.ARGB_8888); cacheCanvas=new Canvas(); path=new Path(); cacheCanvas.setBitmap(cacheBitmap); paint=new Paint(); paint.setStyle(Style.STROKE); paint.setAntiAlias(true); paint.setDither(true); paint.setStrokeCap(Cap.ROUND); paint.setStrokeJoin(Join.ROUND); paint.setStrokeWidth(2); } @SuppressLint("DrawAllocation") @SuppressWarnings("static-access") @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(0x00FFFFFF); Paint bmpPaint=new Paint(); canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint); //canvas.drawPath(path, bmpPaint); canvas.save(canvas.ALL_SAVE_FLAG); canvas.restore(); } @SuppressLint("NewApi") @SuppressWarnings("deprecation") @Override public boolean onTouchEvent(MotionEvent event) { int x=(int)event.getX(); int y=(int)event.getY(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: flag=true; startX=x; startY=y; loc.clear(); path.moveTo(x,y); break; case MotionEvent.ACTION_MOVE: if(flag) { path.moveTo(x,y); path.lineTo(x,y); cacheCanvas.drawLine(startX,startY,x,y,paint); startX=x; startY=y; loc.add(new Point(startX,startY)); } break; case MotionEvent.ACTION_UP: path.reset(); bhnum++; pic=new int[this.view_height][this.view_width]; for(int i=0;i<pic.length;i++) for(int j=0;j<pic[i].length;j++) pic[i][j]=0; flag=false; for(int i=0;i<loc.size();i++) { Log.i("afteradapter",String.valueOf(i)); Log.i("afteradapter",String.valueOf(loc.size())); Point st=(Point)loc.get(i); if(st.x>=this.view_width|| st.x<0|| st.y>=this.view_height||st.y<0) { continue; } int sty=st.y; int stx=st.x; pic[sty][stx]=1; pics[sty][stx]=1; Log.i(String.valueOf(pics[sty][stx]),String.valueOf(pics.length *pics[0].length)); } ArrayList aa=new ArrayList(); aa=ljshibie(); Log.i("after ljshibie",aa.toString()); ArrayList bb=new ArrayList();Log.i("afterbb","can excute!"); bb=tjshibie(); Log.i("after tjshibie",bb.toString()); ccs=PutResult(aa,bb); if( ccs !=null &&ccs.size()>0) { Log.i("ccs","can excute!"); CharSequence cs=(String)ccs.get(0);Log.i("匹配字1",cs.toString()); txtview.setText(cs); Log.i("匹配字2",cs.toString()); int resid=getResources().getIdentifier(cs.toString()+".9.png","drawable","com.example.ybhy"); // linear1=(LinearLayout)findViewById(resid); //linear1.setBackgroundDrawable(getContext().getResources().getDrawable(resid)); this.setBackground(getContext().getResources().getDrawable(resid)); String [] strr=new String []{}; for(int i=0;i<ccs.size();i++) { strr[i]=(String)ccs.get(i); } ArrayAdapter<String> adapter=new ArrayAdapter<String>(this.getContext(),android.R.layout.simple_list_item_single_choice,strr); listv.setAdapter(adapter); loc.clear(); newloc.clear(); newpoints=new int[this.view_height][this.view_width]; } break; } invalidate(); return true; } <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/input" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/background" android:visibility="visible" > <TableRow android:id="@+id/row1" android:layout_margin="3dp" android:layout_weight="4" > <LinearLayout android:id="@+id/linear1" android:layout_weight="1" > <com.example.ybhy.MyView android:id="@+id/drawview1" android:layout_width="match_parent" android:layout_height="344dp" android:background="#00FFFFFF" /> </LinearLayout> </TableRow> <TableRow android:id="@+id/row2" android:layout_weight="1" > <LinearLayout android:id="@+id/txtzi1" android:layout_weight="1" android:orientation="vertical" > <TextView android:id="@+id/text1" android:layout_width="99dp" android:layout_height="match_parent" android:layout_weight="2.76" android:gravity="left|center_vertical" /> </LinearLayout> <LinearLayout android:id="@+id/txtzi2" android:layout_weight="3" > <ListView android:id="@+id/listview1" android:layout_width="match_parent" android:layout_height="48dp" android:layout_weight="1" /> </LinearLayout> </TableRow> <TableRow android:id="@+id/row3" android:layout_margin="3dp" android:layout_weight="1" > <Button android:id="@+id/testsqlite" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:enabled="true" /> </TableRow> </TableLayout>
aid2013 2013-05-04
  • 打赏
  • 举报
回复
把代码贴出来看看
youdiving 2013-05-04
  • 打赏
  • 举报
回复
引用 4 楼 u010495676 的回复:
context 通常对于的是Activity,比如TestActivity TestActivity确保如下: 1. OnCreate()中 setContentView(R.layout.activity_main); 2.activity_main包含了text1与listview1 3.new MyView(TestActivity.this, null)
在mainactivy的xml文件里也布局了MyView
youdiving 2013-05-04
  • 打赏
  • 举报
回复
我在MainActivity里面布局了textview和listview 但总是不出现,重启了好几次还是不行
aid2013 2013-05-04
  • 打赏
  • 举报
回复
context 通常对于的是Activity,比如TestActivity TestActivity确保如下: 1. OnCreate()中 setContentView(R.layout.activity_main); 2.activity_main包含了text1与listview1 3.new MyView(TestActivity.this, null)
youdiving 2013-05-04
  • 打赏
  • 举报
回复
引用 2 楼 u010495676 的回复:
txtview=(TextView)findViewById(R.id.text1); listv=(ListView)findViewById(R.id.listview1); 改为: txtview=(TextView)context.findViewById(R.id.text1); listv=(ListView)context.findViewById(R.id.listview1);
不行啊,直接提示就是错的
aid2013 2013-05-04
  • 打赏
  • 举报
回复
txtview=(TextView)findViewById(R.id.text1); listv=(ListView)findViewById(R.id.listview1); 改为: txtview=(TextView)context.findViewById(R.id.text1); listv=(ListView)context.findViewById(R.id.listview1);
youdiving 2013-05-04
  • 打赏
  • 举报
回复
怎么没人回呢,好郁闷

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧