2016-01-15 59 views
0

我想要检索的项目的的objectID(具体而言,这是一个名为“房间”,在我们的解析模型类)一ListView内点击。 而在这之后,我想检索对象ID传递到使用Intent另一个类。检索解析对象ID在OnTimeClickListener方法

我试图解析文档getObjectId();方法,但似乎不起作用。 我应该如何检索它?

这是我的代码。

Button createBtn; 
Button searchBtn; 
Button myGroupBtn; 
Button settingBtn; 


String[] courses; 
List<String> listItems; 
ArrayAdapter<String> adapter; 
ListView listView; 
TextView textView; 
// when CREAT button is tapped 
public void createBtn(View view){ 
    Intent i = new Intent(getApplicationContext(), Create.class); 
    // Removes animation 
    i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
    startActivity(i); 
} 
// when Setting button is tapped 
public void settingBtn(View view) { 
    Intent i = new Intent(getApplicationContext(), Setting.class); 
    // Removes animation 
    i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
    startActivity(i); 
} 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Intent intent = getIntent(); 
    String courseName = intent.getStringExtra("courseName"); 
    String courseNumber = intent.getStringExtra("courseNumber"); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_search_result); 
    // Making Links to Buttons on Create 
    createBtn = (Button) findViewById(R.id.createBtn); 
    searchBtn = (Button) findViewById(R.id.searchBtn); 
    myGroupBtn = (Button) findViewById(R.id.myGroupBtn); 
    settingBtn = (Button) findViewById(R.id.settingBtn); 


    //Chaning the button colors 
    searchBtn.setTextColor(0xFFFFFFFF); 
    createBtn.setTextColor(0xFFBFBFBF); 
    myGroupBtn.setTextColor(0xFFBFBFBF); 
    settingBtn.setTextColor(0xFFBFBFBF); 

    listView= (ListView)findViewById(R.id.listView); 
    textView= (TextView)findViewById(R.id.textView2); 
    textView.setText(courseName + " " + courseNumber); 

    listItems = new ArrayList<>(); 


    ParseQuery<ParseObject> roomQuery = ParseQuery.getQuery("Room"); 
    roomQuery.whereEqualTo("course" , courseName); 
    roomQuery.whereEqualTo("number" , courseNumber); 

    roomQuery.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> objects, ParseException e) { 

      if (e == null) { 
       for (ParseObject room : objects) { 

        Log.i("Appinfo", String.valueOf(room.get("title"))); 
        String stringToAdd = ""; 

        String opened = String.valueOf(room.get("opened")); 
        String x; 
        if(opened.equals(true)){ 
         x = "Open"; 
        }else{ 
         x = "Closed"; 
        } 

        stringToAdd = stringToAdd + String.valueOf(room.get("studyDate")) + " " + 
          String.valueOf(room.get("category")) + " " + x + "\n" 
          + String.valueOf(room.get("title")) + 
          "   " 
        ; 
        listItems.add(stringToAdd); 
        Log.i("Appinfo", "A"); 
       } 


      } else { 
       Log.i("Appinfo", "B"); 
       e.printStackTrace(); 
      } 

     } 
    }); 
    initList(); 

} 
public void initList() { 

    Log.i("Appinfo", "C"); 



    adapter = new ArrayAdapter<String>(this, R.layout.list_two, R.id.txtvw, listItems); 
    listView.setAdapter(adapter); 
    listView.setOnItemClickListener(this); 


} 


@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Intent intent = new Intent(getApplicationContext(), Room.class); 
    String category = listItems.get(position); 
} 

}

回答

0

你的问题是,你失去解析的objectId在 “Adapter”:您使用Strings和基本的Android Adapter(有:new ArrayAdapter<String>(this, R.layout.list_two, R.id.txtvw, listItems);),以显示你的元素;问题是,你的转换复杂的Room对象为String不包含大量的信息会让你失去了objectId你想保留。

解决你的问题是一个叫做Adapter或更专门为这种情况下Custom Adapter非常的Android十岁上下的格局,这将在设备解释如何使您的Room元素融入到你的应用程序的ListView的每一个细胞。

这是非常有据可查的(更好,我可以写在这篇文章中的所有东西)所以here是通用官方文档,在这里,对我来说,the best tutorial来获得这个概念。

PS:对于初学者,我推荐Base Adapter,它对我来说是最简单的:)