我有一个TextView,我正在变成一个按钮。 TextView实际上存在于二级布局中。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.history);
这是“R.layout.history”的主要布局
在ListAdapter中加载一堆结果,并使用R.layout.card_background显示每个结果
我正在尝试初始化并为位于R.Layout.card_background上的TextView设置setOnClickListener,但我收到了nullPointerException。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.history);
Typeface tf = Typeface.createFromAsset(getAssets(),"Roboto-Light.ttf");
ListView listContent = (ListView) findViewById(android.R.id.list);
TextView history = (TextView) findViewById(R.id.history);
history.setTypeface(tf);
Cursor cursor = db.getAllLogs();
Log.d("history.java", "finished Cursor cursor = db.getAllLogs();");
String[] from = {"_id", "dd", "gg", "ppg", "odo"};
int[] to = {deleteVal, R.id.cardDate, R.id.cardG, R.id.cardP, R.id.cardM};
ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.card_background, cursor, from, to);
listContent.setAdapter(adapter);
TextView cardDelete = (TextView) findViewById(R.id.cardDelete);
cardDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v){
}
});
}
我知道如何设置并停止获取NPE吗?
由于
答案 0 :(得分:0)
您必须编写一个扩展SimpleCursorAdapter的自定义适配器,并在OnClickListener
方法中添加getView()
。
当你现在尝试时,TextView在活动布局中被搜索,当然没有找到,因此变量没有被填充,并且只要你想在空指针上执行一个方法,app就会崩溃。 / p>
答案 1 :(得分:0)
我相信你的活动是绑定到另一个内容视图setContentView(R.layout.history);
因此是nullPointerException。
答案 2 :(得分:0)
所以我实际上做了一点挖掘并试了一下。如果有人能告诉我为什么这是一个坏/好主意,虽然我会很感激,因为如果它对应用程序有害,我宁愿不将它提交到内存中。
final LayoutInflater cardLayout = getLayoutInflater();
final View cardDeleteText = cardLayout.inflate(R.layout.card_background, null);
TextView cardDelete = (TextView) cardDeleteText.findViewById(R.id.cardDelete);
cardDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v){
}
});
答案 3 :(得分:0)
您可以从card_background
充气自定义布局使用此代码
View card_background_view = inflater.inflate(R.layout.card_background, container, false);
然后 替换这个
TextView history = (TextView) findViewById(R.id.history);
用这个
TextView history =(TextView)card_background_view.findViewById(R.id.history);