2015-10-16 20 views
8

Ich bin neu in der Android-Entwicklung und mit ein bisschen ein Problem, Aktivitäten zu ändern. Ich versuche, Aktivitäten innerhalb einer Methode zu ändern, aber ich erhalte den Fehler cannot resolve method startActivity und am Parameter Ende der Fehler Cannot resolve constructor 'Intent (...)'. Ich fand a question here mit der gleichen Art von Problem und versuchte, ihre Antworten in mein Programm zu implementieren, aber keine Freude.Kann Methode nicht auflösen startActivity()

Hier ist der Code:

public void open301(View view) { 
    startActivity(new Intent(CustomAdapter.this, ThreeZeroOne.class)); 
} 

, bevor sie mit den gleichen Fehler wie diese über dem Code verknüpft an den Antworten der Frage suchen sah:

public void open301(View view) { 
    Intent openThree = new Intent(this,ThreeZeroOne.class); 
    startActivity(openThree); 
} 

komplette Code:

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.content.Intent; 

public class CustomAdapter extends BaseAdapter { 

String[] result; 
Context context; 
int[] imageId; 

private static LayoutInflater inflater = null; 

public CustomAdapter(selectGame SelectGame, String[] prgmNameList, int[] prgmImages) { 
    result = prgmNameList; 
    context = SelectGame; 
    this.imageId = prgmImages; 
    inflater = (LayoutInflater) context.getSystemService(Context. 
      LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    return result.length; 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

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

public class Holder { 
    TextView tv; 
    ImageView img; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    Holder holder = new Holder(); 
    View rowView; 
    rowView = inflater.inflate(R.layout.game_selection, null); 
    holder.tv = (TextView) rowView.findViewById(R.id.txt); 
    holder.img = (ImageView) rowView.findViewById(R.id.img); 
    holder.tv.setText(result[position]); 
    holder.img.setImageResource(imageId[position]); 
    rowView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(context, "Beginning game " + result[position], Toast.LENGTH_SHORT).show(); 

     } 
    }); 
    return rowView; 
} 

public void open301(View view) { 
    Intent openThree = new Intent(this,ThreeZeroOne.class); 
    startActivity(openThree); 
} 

}

+0

Wo versuchen Sie, die Methode auszuführen? in einer Aktivität? Klasse? Fragment? –

+0

In einer Klasse werde ich den Code veröffentlichen, wo es sitzt. – COYG

Antwort

26

Sie sollten verwenden Sie den Kontext des Adapters:

public void open301(View view) { 
    Intent openThree = new Intent(context,ThreeZeroOne.class); 
    context.startActivity(openThree); 
} 
+2

'Absicht (this,' ist falsch – Blackbelt

2

Um eine neue Aktivität starten Sie einen Kontext aus starten müssen, und Ihre aktuelle Aktivität „BaseAdapter“ ist kein Zusammenhang, luckly jede Ansicht eine Context hat, so können Sie wie folgt tun:

public void open301(View view) { 
    Intent openThree = new Intent(view.getContext(), ThreeZeroOne.class); 
    view.getContext().startActivity(openThree); 
} 
+0

Das hat etwas funktioniert, müsste ich den Intent-Namen nicht in die Klammer von startActivity setzen? sonst wie würde es wissen, welche Aktivität zu starten. - Das war in Bezug auf deinen alten Kommentar. – COYG

+0

Ich bearbeite meine Answers, um es klar zu machen, irgendwelche anderen Zweifel? –

+1

'Absicht (this,' ist falsch – Blackbelt

1

Zuerst sollten Sie Ihren Kontext:

private Context context; 

public CustomAdapter(Context context) { 
     this.context = context;  
} 

Und dann:

  context.startActivity(openThree); 
Verwandte Themen