Ich mache eine App, wo ich verschiedene Aktivitäten in meiner Datenbank, die auf der benutzerdefinierten Liste anzeigen, die ich habe, zeigt die grundlegenden Benutzerinformationen angezeigt . Ich habe der Listenansicht einen onItemClickListener hinzugefügt, sodass der Benutzer auf eine Detailseite weitergeleitet wird, auf der mehr Informationen aus der Datenbank angezeigt werden sollen. Die Absicht funktioniert, um den Benutzer an die neue Aktivität zu senden, und ich habe auch die Funktion putExtra in meiner Absicht verwendet, die Position des Listenansichtsklicks zu senden und diese Position auf der neuen Seite mit einem Toast anzuzeigen, um zu testen, ob sie funktioniert. Alles ist in Ordnung, aber jetzt versuche ich, die Informationen aus der Datenbank zu bekommen. Ich habe versucht, viele verschiedene Tutorials zu sehen, aber nichts funktioniert, ich denke, wenn ich den Titel der Aktivität in putExtra senden kann, dann werde ich nur in der Lage sein, Sachen aus Aktivitäten Tabelle anzuzeigen, wo die putExtra Titel Info = Titel in der Tabelle. Aber ich kann den Titel scheinbar nicht von der Tabelle bekommen und in die putExtra-Funktion einfügen. Ich arbeite mit Sugar ORM-Datenbank.Android-Liste So zeigen Sie Elemente anzeigen gehen auf zusätzliche Details Seite, wenn auf w/Datenbank geklickt
Hier ist, wo ich die Listenansicht auf der Viewdata-Klasse anzuzeigen:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_data);
final ListView listView = (ListView) findViewById(R.id.viewAll_listview);
long count = Activitytable.count(Activitytable.class);
if(count>0) {
Activitytable.listAll(Activitytable.class);
final List<Activitytable> activitytable = Activitytable.listAll(Activitytable.class);
ViewAllListView madapter = new ViewAllListView(getApplicationContext(), activitytable);
listView.setAdapter(madapter);
listView.setClickable(true);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?>parent, View v, int position, long id) {
Object o = getItem(position);
Activitytable AT = Activitytable.findById(Activitytable.class,activitytable.get(position).getId());
Intent i = new Intent(getApplicationContext(),Details.class);
i.putExtra("listPosition",position);
startActivity(i);
}
public Object getItem(int position) {return position;}
});
}
else
{
Toast.makeText(getApplicationContext(), "No Data Available in Table", Toast.LENGTH_LONG);
}
}
Hier ist meine benutzerdefinierte Liste Ansichtsklasse ViewAllListView:
public class ViewAllListView extends BaseAdapter {
public Context tcontext;
private LayoutInflater inflater;
public ViewHolder holder=null;
private List<Activitytable> activitytable = new ArrayList<>();
ViewAllListView(Context context, List<Activitytable> values)
{
this.tcontext = context;
this.activitytable = values;
this.inflater = LayoutInflater.from(context);
}
public int getCount(){
return activitytable.size();
}
public Object getItem(int position) {return position;}
@Override
public long getItemId(int position) {return 0;}
@Override
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView=inflater.inflate(R.layout.layout_for_listview_show,null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.title_textview);
holder.Overall_rating = (TextView) convertView.findViewById(R.id.overallrating_textview);
holder.Category = (TextView) convertView.findViewById(R.id.category_textview);
holder.Average_price = (TextView) convertView.findViewById(R.id.averageprice_textview);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
holder.title.setText(this.activitytable.get(position).Title);
holder.Overall_rating.setText(this.activitytable.get(position).Overall_rating);
holder.Category.setText(this.activitytable.get(position).Category);
holder.Average_price.setText(this.activitytable.get(position).Average_price);
return convertView;
}
static class ViewHolder
{
TextView title, Overall_rating, Category, Average_price;
}
}
Und hier ist das, was ich bisher in meinem Details Klasse:
public class Details extends AppCompatActivity {
TextView titletext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
titletext = (TextView) findViewById(R.id.titletext);
String data = getIntent().getSerializableExtra("listPosition").toString();
Toast.makeText(getBaseContext(),String.valueOf(data),Toast.LENGTH_LONG).show();
}
}
Danke! Könntest du mir helfen, den Namen der Aktivität (Titel) anzuzeigen, sobald ich auf der Detailseite bin, weil sie im Toast perfekt angezeigt wird, aber nicht in der Textansicht angezeigt wird, die ich habe. Ich versuche, einfach die gleiche Art von Sache zu verwenden, die ich im Toast verwendet habe: titeltext.setText (String.valueOf (data)); –
Fehler beim Testen und Klicken auf die Detailseite des Telefons. Der Fehler kann die Aktivität nicht starten ... 'java.lang.nullPointerException: Versuch, die virtuelle Methode aufzurufen' void android.widget.TextView.setText (java.lang.CharSequence) für einen Null-Objektverweis ' –
@KatyJones sicher, aber das scheint eine ganz andere Frage zu sein. Vielleicht kannst du eine Frage starten und mich dort verlinken oder eine ähnliche Antwort finden, wenn sie schon vorher beantwortet wurde. – sihao