2016-04-05 5 views
0

私は自分のデータベースでさまざまなアクティビティを持っているアプリケーションを作っています。これは私が作ったカスタムリストビューに表示され、 。私はリストビューにonItemClickListenerを追加したので、データベースからより多くの情報を表示する '詳細'ページにユーザーを移動させます。このインテントはユーザーを新しいアクティビティに送るために働きます。また、リストビューのクリック位置を送信するためにputExtra関数を使用しました。新しいページのトーストにその位置が表示されているかどうかテストしています。すべてが問題なく、今はデータベースから情報を取得しようとしています。私は多くの異なるチュートリアルを見てみましたが、何も動作していません、私はputExtraで送信するアクティビティのタイトルを取得できれば、putExtraのtitle info =表内のタイトル。しかし、私はテーブルからタイトルを取得し、それをputExtra関数に入れることはできません。私はSugar ORMデータベースを使って作業しています。私はViewDataをクラス上のリストビューを表示するのはここAndroidリストアイテムの表示方法データベースをクリックすると追加の詳細ページに移動します

は次のとおりです。ここで

@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です:

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(); 



} 
}  

答えて

0

ViewAllListView.java(あなたがそれにアクセスできるようにするアイテムを返す必要がある)

public class ViewAllListView extends BaseAdapter { 

    ..... 

    public Object getItem(int position) { 
    //instead of return position; 
    return activitytable.get(position); 
    } 

    ..... 
} 

ViewData.java(あなたがアイテムを取得することができ、Activitytableオブジェクトにそれをキャスト)と、名前をつけてください)

@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()); 

     ...... 
} 

助けてくれたら教えてください!ハッピープログラミング!

+0

ありがとうございます! Toastに完全に表示されるので、詳細ページにいったん表示されるとアクティビティ(タイトル)の名前を表示するのを手伝ってもらえますか?私が持っているテキストビューには表示されません。私はトーストで使用したのと同じタイプのものを非常に単純に使用しようとしています:titletext.setText(String.valueOf(data)); –

+0

テストして電話で詳細ページをクリックするとエラーが発生します。エラーがアクティビティを開始できません... 'java.lang.nullPointerException:仮想メソッドを呼び出そうとしました'ヌルオブジェクトリファレンスで 'android.widget.TextView.setText(java.lang.CharSequence)'を無効にしました ' –

+0

@KatyJonesこれとはまったく異なる質問であるようです。おそらくあなたは質問を開始して、そこにリンクを張ったり、既に答えがあった場合は同様の答えを見つけることができます。 – sihao

関連する問題