尝试不在主布局中为TextView设置setOnClickListener

时间:2014-02-10 18:34:39

标签: android textview

我有一个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吗?

由于

4 个答案:

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