AndyJJ
AndyJJ

Reputation: 73

How do i get listview's child?

I want to change text in textview which is in a listview on click

listViewMessage = (ListView) rootview.findViewById(R.id.listView);      
listViewMessage.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
     txtViewMess = (TextView) listViewMessage.getChildAt(position).findViewById(R.id.textViewMessage); //error
     txtViewMess.setText("Paid");
    }
    });

Code worked for a couple of textview, but some turned to

 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

Upvotes: 0

Views: 271

Answers (3)

Muhammad Saad Rafique
Muhammad Saad Rafique

Reputation: 3189

You are using wrong view to initialize your text view:

listViewMessage = (ListView) rootview.findViewById(R.id.listView);      
listViewMessage.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, final int 
position, long id) {
txtViewMess = (TextView) 
view.getChildAt(position).findViewById(R.id.textViewMessage); //error
txtViewMess.setText("Paid");
}
});

Upvotes: 1

himel
himel

Reputation: 510

just get it like this

TextView tv=adapterView.getSelectedView().findViewById(R.id.my_tv);

Upvotes: 1

KeLiuyue
KeLiuyue

Reputation: 8237

You can use callback in your code .

YourAdapter

@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
    ViewHolder viewHolder = null;
    ...
    viewHolder.mTextView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mTextClickListener.onTextClick(i);
        }
    });
    return view;
}

/**
 * text click
 */
public interface onItemTextClickListener {
    void onTextClick(int i);
}

private onItemTextClickListener mTextClickListener;

public void setOnItemTextClickListener(onItemTextClickListener mTextClickListener) {
    this.mTextClickListener = mTextClickListener;
}

class ViewHolder {
    TextView mTextView;
}

Call method

mAdapter.setOnItemTextClickListener(new onItemTextClickListener() {
        @Override
        public void onTextClick(int i) {
            // do something here
        }
});

Upvotes: 0

Related Questions