2016-11-27 34 views
0

私はこのコードを試しています。私はParse.comを使用してレストラン名を取得し、listViewに配置しています。 名前の1つをクリックすると、詳細ページに移動し、レストランに関する詳細情報を取得できます。 問題は、ListViewの名前をクリックすると詳細ページに移動しますが、何も表示されません。 私はアンドロイドの新機能であり、どのように動作するべきかを完全に理解していません。ここ Parse.com onListItemClick詳細情報が表示されません

は、レストランの名前を表示すると仮定し、私のmainActivity

public class MainActivity extends Activity { 


private CustomAdapter urgentTodosAdapter; 
private ParseQueryAdapter<ParseObject> mainAdapter; 
private ListView listView; 
List<ParseObject> Name =new ArrayList<ParseObject>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listview); 

    mainAdapter = new ParseQueryAdapter<ParseObject>(this,"RestaurantDetail"); 
    urgentTodosAdapter = new CustomAdapter(this); 
    listView = (ListView) findViewById(R.id.listView1); 

    listView.setAdapter(urgentTodosAdapter); 
    urgentTodosAdapter.loadObjects(); 

// Binds the Adapter to the ListView 
listView.setAdapter(urgentTodosAdapter); 
// Capture button clicks on ListView items 
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

     // Send single item click data to SingleItemView Class 
     Intent random1 = new Intent(MainActivity.this, SingleItemView.class); 
     if (Name.size() > i) 

      // Pass data "name" followed by the position 
      random1.putExtra("Name", Name.get(i).getString("Name")); 

     // Open SingleItemView.java Activity 
     startActivity(random1); 

    } 
}); 
} 
} 

のコードと私のcustomAdapterクラス

public class CustomAdapter extends ParseQueryAdapter<ParseObject> { 

public CustomAdapter(Context context) { 

    super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() { 

     public ParseQuery create() { 
      ParseQuery query = new ParseQuery("RestaurantDetail"); 

    /* query.whereEqualTo("Name", true);*/ 

      return query; 
     } 

    }); 

} 

@Override 
public View getItemView(ParseObject object, View v, ViewGroup parent) { 
    if (v == null) { 

     v = View.inflate(getContext(), R.layout.activity_main, null); 
    } 
    super.getItemView(object, v, parent); 

    ParseImageView todoImage = (ParseImageView) v.findViewById(R.id.icon); 
    ParseFile imageFile = object.getParseFile("Logo"); 
    if (imageFile != null) { 
     todoImage.setParseFile(imageFile); 
     todoImage.loadInBackground(); 
    } 

    TextView titleTextView = (TextView) v.findViewById(R.id.textView3); 
    titleTextView.setText(object.getString("Name")); 
    return v; 
} 
} 

とクラスであるなど

@ParseClassName("RestaurantDetail") 
public class SingleItemView extends Activity { 

// Declare Variables 
protected TextView txtname; 
String Name; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // Get the view from SingleItemView.xml 
    setContentView(R.layout.single_item_view); 

    txtname = (TextView) findViewById(R.id.name); 

    // Retrieve data from MainActivity on item click event 
    Intent random1 = getIntent(); 
    // Get the name 
    Name = random1.getStringExtra("Name"); 

    // Locate the TextView in singleitemview.xml 

    // Load the text into the TextView 
    txtname.setText(Name); 

} 
} 
+0

「onCreate」コードを別のアクティビティ、つまりカスタムアダプターに移動します。 'RestaurantDetail'クラスは、パースクラスの初期化とset/getterを使用するためのものです。それでもコードが必要な場合は、私にお知らせください。私はあなたのために投稿します。 – AndroidDev21921

+0

AndroidDev21921、可能であれば投稿してください。大変感謝しています:) –

+0

喜んでそれが働いた - あなたは何か質問があれば、私に知らせてください! – AndroidDev21921

答えて

1

いくつかの文脈を得るためにOPのコメントセクションの私のコメントを見てください:

回答:

MainActivityでは、アダプタに追加するクエリを作成しませんでした。あなたのパースクラスを初期化し

public class CustomAdapter extends ArrayAdapter<RestaurantDetail> { 
private final Context mContext; 
private List<RestaurantDetail> restrauants; 

public CustomAdapter(Context context, List<RestaurantDetail> objects) { 
    super(context, R.layout.include_restaurants, objects); 
    this.mContext = context; 
    this.restrauants = objects; 
} 


public View getView(final int position, View convertView, final ViewGroup parent) { 
    if (convertView == null) { 
     LayoutInflater mLayoutInflater = LayoutInflater.from(mContext); 
     v = mLayoutInflater.inflate(R.layout.include_restaurants, null); 
    } 

    ParseImageView todoImage = (ParseImageView) v.findViewById(R.id.icon); 
    ParseFile imageFile = object.getParseFile("Logo"); 
    if (imageFile != null) { 
     todoImage.setParseFile(imageFile); 
     todoImage.loadInBackground(); 
    } 

    TextView titleTextView = (TextView) v.findViewById(R.id.textView3); 
    titleTextView.setText(object.getString("Name")); 

    //this is also where you can handle to onClick stuff 

    cardView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


     } 
    }); 


    return v; 
} 
} 

:あなたのゲッターを置くことができる場所でもある/以下を見て、自分のニーズにParseQueryを調整します

MainActivityクラス

public class MainActivity extends Activity { 


private CustomAdapter urgentTodosAdapter; 
private ParseQueryAdapter<ParseObject> mainAdapter; 
private ListView listView; 
List<ParseObject> Name =new ArrayList<ParseObject>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listview); 

    listView = (ListView) findViewById(R.id.listView1); 

    //I'm not sure how you initialized your custom adapter - i'll show you how i did it, but yours might work too 
    urgentTodosAdapter = new urgentTodosAdapter(MainActivity.this, new ArrayList<RestaurantDetail>()); 

    listView.setAdapter(urgentTodosAdapter); 

    //Here is where you forgot to add your ParseQuery for 'Restaurants' 

    ParseQuery<RestaurantDetail> query = ParseQuery.getQuery(RestaurantDetail.class); 
    query.findInBackground(new FindCallback<RestaurantDetail>() { 
     public void done(List<RestaurantDetail> resutarantList, ParseException e) { 
      if (e == null) { 

       if (resutarantList.size() > 0) { 
        for (int i = 0; i < resutarantList.size(); i++) { 
         //you forgot to do this - didn't add anything for the adapter to show. 
         urgentTodosAdapter.add(resutarantList.get(i)); 

        } 

       } else { 

        // do something if empty 

       } 
      } else { 

       // do something if null 
      } 
     } 
    }); 

    //This is fine here, but you can also do the same in your adapter class; I'll keep this here and show you where to put it 
    //in the adapter as well. 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

      // Send single item click data to SingleItemView Class 
      Intent random1 = new Intent(MainActivity.this, SingleItemView.class); 
      if (Name.size() > i) 

       // Pass data "name" followed by the position 
       random1.putExtra("Name", Name.get(i).getString("Name")); 

      // Open SingleItemView.java Activity 
      startActivity(random1); 

     } 
    }); 
} 
} 

CustomAdapterクラスセッター。

@ParseClassName("YourClassNameInYourDBHere") 
public class ResuaurantDetail(your class here) extends ParseObject 
{ 

} 
+0

AndroidDev21921、私はそれを働かせましたが、私の次の質問は、どうすればそのデータをそのボタンのクリックを使って別のアクティビティにするのですか? –

+1

データの複雑さにもよりますが、インテントエクストラを使用することができます(これについては多くの回答が必要ですが、必要に応じて投稿できます)。 それをグローバルに格納するデータモデルを作成します。インテントエキストラとして情報を送信するのははるかに簡単です(少なくとも私にとっては)。 – AndroidDev21921

+0

AndroidDev21921、私に例を教えてください。私はアンドロイドに慣れていて、まだそれを学んでいます。 –

関連する問題