user3506
user3506

Reputation: 119

Calling a method from my MainActivity

I've desperatly tried everything on Internet to be able to call my thisIsAMethodJustToTryOutMyButton(View view), when user click my Delete Button MainActivity, but nothing works. The button gives no reaction.

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

Adapter class

public class Adapter extends BaseAdapter{

private ArrayList<item> items= new ArrayList<>();


public void addItemToListView(Item item){
    this.items.add(item);
}

public void deleteItem(int position){
    items.remove(position);
}

@Override
public Item getItem(int position) {
    return items.get(position);
}

@Override
public long getIdOfItem(int position) {
    return position;
}

@Override
public int getCount() {
    return items.size();
}

class ViewHolder {
    public TextView title, content;

    public ViewHolder(View view){
        title= (TextView) view.findViewById(R.id.title);
        content= (TextView) view.findViewById(R.id.content);
    }
}


@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder;

    if(null == convertView){
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        convertView = inflater.inflate(R.layout.custom_row, parent, false);
        viewHolder = new ViewHolder(convertView);
        viewHolder.header.setTag(position);
        convertView.setTag(viewHolder);

    }
    else{
        viewHolder = (ViewHolder) convertView.getTag();
    }

    Item item= getItem(position);
    viewHolder.header.setText(item.title);
    viewHolder.bodyText.setText(item.content);
    return convertView;
}
}

MyDialogForDeletingAItem class

 public class MyDialogForDeletingAItem extends DialogFragment 
    implements View.OnClickListener {
    Button delete;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.deleteDialog, null);
    delete = (Button) view.findViewById(R.id.delete);
    delete.setOnClickListener(this);
    return view; }

@Override
public void onClick(View view) {
if (view.getId() == R.id.delete) {
MainActivity main = new MainActivity();
            main.thisIsAMethodJustToTryOutMyButton(view, //This is where the problem is... 
//I don't know what to pass in here);
}

MainActivity class

 public class MainActivity extends AppCompatActivity implements       
    AdapterView.OnItemLongClickListener, AdapterView.OnItemClickListener {
    Adapter adapter;
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.ListView);
        adapter= new Adapter();
        listView.setAdapter(adapter);
        listView.setOnItemLongClickListener(this);
        listView.setOnItemClickListener(this);

public void longItemClick(View view) {
    DialogFragment dialog = new MyDialogForDeletingAItem();
    dialog.show(this.getSupportFragmentManager(), "MyDialogForDeletingAItem");
    thisIsAMethodJustToTryOutMyButton(view);

}
  public void deleteRow(int position){
        adapter.delete(position);
        adapter.notifyDataSetChanged();

    }

    public void thisIsAMethodJustToTryOutMyButton(View view, int position){
deleteRow(position);
     Toast.makeText(MainActivity.this,"" + position, Toast.LENGTH_SHORT).show();
}


 <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="DELETE"
        android:id="@+id/delete" 
        android:clickable="true"
        android:layout_alignTop="@+id/edit"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="102dp"
        android:layout_marginEnd="102dp" />


at se.example.android.myapplication.MainActivity.thisIsAMethodJustToTryOutMyButton
(MainActivity.java:100)
at se.example.android.myapplication.DeleteAndEdit.onClick(DeleteAndEdit.java:45)

Upvotes: 1

Views: 1664

Answers (3)

Bharatesh
Bharatesh

Reputation: 9009

On your onClick(View view) method creates a new instance of your MainActivity while you need to use already loaded activity instance.

call like this

@Override
public void onClick(View view) {
if (view.getId() == R.id.delete) {
      ((MainActivity) getActivity()).thisIsAMethodJustToTryOutMyButton(view);
}

Upvotes: 1

Aamir
Aamir

Reputation: 286

In your MainActivity where are you referencing yourthisIsAMethodJustToTryOutMyButton ?? Try to add android:onClick="thisIsAMethodJustToTryOutMyButton" in your xml file

Upvotes: 0

a_m
a_m

Reputation: 341

Your deleteRow() method should take View as a parameter

public void deleteRow(View view)

public static final int onClick

Added in API level 4 Name of the method in this View's context to invoke when the view is clicked. This name must correspond to a public method that takes exactly one parameter of type View. For instance, if you specify android:onClick="sayHello", you must declare a public void sayHello(View v) method of your context (typically, your Activity).

Must be a string value, using '\;' to escape characters such as '\n' or '\uxxxx' for a unicode character.

This may also be a reference to a resource (in the form "@[package:]type:name") or theme attribute (in the form "?[package:][type:]name") containing a value of this type.

onClick

Upvotes: 0

Related Questions