public class MainActivity extends AppCompatActivity {
protected List<ParseObject> mStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ParseUser currentUser = ParseUser.getCurrentUser();
if (currentUser != null){
//show user the homepage
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Status");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> status, ParseException e) {
if (e==null){
//success
mStatus = status;
StatusAdapter adapter = new StatusAdapter(getListView().getContext(), mStatus);
setListAdapter(adapter);
} else {
//ther was a problem.
}
}
});
} else {
//show login screen
Intent takeUserToLogin = new Intent(this, LoginActivity.class);
startActivity(takeUserToLogin);
}
}
在上面的代码中,我在getListView()
和setListAdapter
上收到错误。
我在StatusAdapter
类中有以下代码:
public class StatusAdapter extends ArrayAdapter<ParseObject> {
protected Context mContext;
protected List<ParseObject> mStatus;
public StatusAdapter(Context context, List<ParseObject> status){
super(context, R.layout.homepagecustomlayout, status);
mContext = context;
mStatus = status;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent){
ViewHolder holder;
if(convertView == null){
convertView = LayoutInflater.from(mContext).inflate(
R.layout.homepagecustomlayout,null);
holder = new ViewHolder();
holder.usernameHomepage = (TextView)convertView.findViewById(R.id.usernameHP);
holder.statusHomepage = (TextView)convertView.findViewById(R.id.statusHP);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ParseObject statusObject = mStatus.get(position);
//user
String username = statusObject.getString("user");
holder.usernameHomepage.setText(username);
//status
String status = statusObject.getString("newStatus");
holder.statusHomepage.setText(status);
return convertView;
}
public static class ViewHolder{
TextView usernameHomepage;
TextView statusHomepage;
}
}
我关注this tutorial。
答案 0 :(得分:3)
getListView()
和setListAdapter()
是ListActivity
/ ListFragment
的方法。
但是,似乎你正在扩展AppCompatActivity
。因此,您可以向listView
添加activity_main
;然后:
ListView listview = findViewById(R.id.yourlistID);
以此方式设置适配器 - listView.setAdapter();
希望这有帮助!
答案 1 :(得分:0)
从ListView
切换到AppCompatActivity
时,我遇到了同样的问题。只需进行很少的更改即可替换ListView
内置的内容。我在这里列出了它们,以方便您迁移。
您无法再致电this
来获取ListView
。您需要从视图中获取它。我建议创建这样的方法:
protected ListView getListView() { return findViewById( android.R.id.list ); }
注意:如果列表中没有id
的{{1}},则需要对其进行更新,但是我建议使用ID list
,如果可能的话,它保持一致,表示您可以在多个Activity上使用此方法。
您不能再覆盖list
方法,因为它不存在于onListItemClick
上,因此您需要创建自己的侦听器并将其设置为{{ 1}},并将其添加到您的AppCompatActivity
中。这是一个示例:
setOnItemClickListerner
您无法再在onCreate
中呼叫getListView().setOnItemClickListener( new AdapterView.OnItemClickListener() {
@Override
public void onItemClick( AdapterView<?> parent, View view, int position, long id ) {
Cursor cursor = (Cursor) getListView().getItemAtPosition( position );
String itemId = cursor.getString( cursor.getColumnIndex( "id" ) );
Intent itemActivityIntent = new Intent( view.getContext(), Item.class );
itemActivityIntent.putExtra( view.getContext().getPackageName() + ".itemId", itemId );
startActivity( itemActivityIntent);
} )
} );
。相反,您将需要获取ListView并调用this.setListAdapter
,如下所示:
populateListView
应该这样做。您可能还需要对设置进行一些其他调整,但这些调整很大。