Android列表如何查看项目单击w/数据库时转到额外详细信息页面
我正在制作一个应用程序,其中我的数据库中有不同的活动,它显示在我制作的自定义列表视图上,该视图显示用户的基本活动信息。我在列表视图中添加了一个McClickListener,因此它会将用户带到一个“详细信息”页面,在那里我想显示数据库中的更多信息。意图可以将用户发送到新活动,我在意图中还使用了putExtra函数来发送列表视图的位置,单击并在新页面上的toast中显示该位置,以测试它是否工作。一切都很好,但现在我正试图从数据库中获取信息。我试过看很多不同的教程,但都没有效果,我想如果我能在putExtra中获得要发送的活动的标题,那么我将能够显示活动表中的内容,其中putExtra title info=title在表中。但我似乎无法从表中获取标题并将其放入putExtra函数中。我正在使用Sugar ORM数据库 下面是我在ViewData类上显示列表视图的位置:Android列表如何查看项目单击w/数据库时转到额外详细信息页面,android,android-intent,Android,Android Intent,我正在制作一个应用程序,其中我的数据库中有不同的活动,它显示在我制作的自定义列表视图上,该视图显示用户的基本活动信息。我在列表视图中添加了一个McClickListener,因此它会将用户带到一个“详细信息”页面,在那里我想显示数据库中的更多信息。意图可以将用户发送到新活动,我在意图中还使用了putExtra函数来发送列表视图的位置,单击并在新页面上的toast中显示该位置,以测试它是否工作。一切都很好,但现在我正试图从数据库中获取信息。我试过看很多不同的教程,但都没有效果,我想如果我能在put
@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);
}
}
你可能想考虑这些变化:
ViewAllListView.java(您需要返回项目才能访问它) ViewData.java(您可以检索项目,将其强制转换为Activitytable对象)并获取名称)@覆盖
创建时受保护的void(Bundle savedInstanceState){
......
public void onItemClick(AdapterViewparent、视图v、内部位置、长id){
Activitytable o=(Activitytable)getItem(位置);
//您可以从对象o检索名称
i、 putExtra(“listName”,o.getName());
......
}
如果有帮助,请告诉我!编程愉快!谢谢!您能帮我显示活动名称(标题)吗一旦我进入详细信息页面,因为它在Toast中显示得非常完美,但不会显示在我拥有的textview中。我试图非常简单地使用我在Toast中使用的相同类型的东西:titletext.setText(String.valueOf(data));当我测试并单击手机上的详细信息页面时,它不断出现错误。错误无法启动活动…'java.lang.nullPointerException:尝试调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)关于空对象引用“@KatyJones”当然可以,但这似乎是一个与此完全不同的问题。也许你可以开始一个问题,并将我链接到那里,或者找到一个类似的答案(如果以前已经回答过)。
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;
}
}
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();
}
}
public class ViewAllListView extends BaseAdapter {
.....
public Object getItem(int position) {
//instead of return position;
return activitytable.get(position);
}
.....
}
@Override
protected void onCreate(Bundle savedInstanceState) {
......
public void onItemClick(AdapterView<?>parent, View v, int position, long id) {
Activitytable o = (Activitytable) getItem(position);
//you can retrieve the name from object o
i.putExtra("listName", o.getName());
......
}