gpt4 book ai didi

java - 无法填充 ListView 未调用 getView

转载 作者:行者123 更新时间:2023-11-29 23:57:42 27 4
gpt4 key购买 nike

我正在尝试使用从用户那里获取的输入数据来填充 ListView 。

AddPostPage 是我从用户那里获取数据的地方。我没有看到任何错误消息并且 postList 不为空。只是没有调用 getview 并且我在 listview 中看不到任何条目。因为 listview 不在 addpostpages Activity 中(它在另一个布局中forum_entries.xml)也许这就是问题所在?

public class AddPostPage extends AppCompatActivity {

String categoryName;
private EditText titleInput;
private EditText bodyInput;
PostAdapter adapter;
ListView postlistview;


protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.forum_user_post);
categoryName = (String) getIntent().getSerializableExtra("incomingcategory");
View forum_entries = getLayoutInflater().inflate(R.layout.forum_entries, null, false);
postlistview = (ListView) forum_entries.findViewById(R.id.categoryPostsListView);

Button add = (Button) findViewById(R.id.addButton);
titleInput = (EditText) findViewById(R.id.titleInput);
bodyInput = (EditText) findViewById(R.id.bodyInput);
add.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {

Post post = new Post(titleInput.getText().toString(),bodyInput.getText().toString());

if(categoryName.equals("CS 201")){
List<Post> postList = new ArrayList<>();
postList.add(post);
Log.d("test",postList.get(0).getTitle()); //working

adapter = new PostAdapter(getApplicationContext(), R.layout.post_row, postList);

postlistview.setAdapter(adapter);

adapter.notifyDataSetChanged();



}






}
});
}


}

这是 PostAdapter:

public class PostAdapter extends ArrayAdapter<Post> {
private List<Post> postList = new ArrayList<Post>();
private Context context;

private int layoutResource;

public PostAdapter(Context context, int layoutResource, List<Post> posts) {
super(context, layoutResource, posts);
this.layoutResource = layoutResource;
this.postList = posts;
this.context = context;
Log.d("adater",posts.get(0).getBody());
}

public View getView(final int position, View convertView, ViewGroup parent) {
Log.d("getview","getview"); // not called.
View view = convertView;

if (view == null) {
Log.d("bos","bos");
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
view = layoutInflater.inflate(layoutResource, null);
}

Post posts = getItem(position);
Log.d("posts",posts.toString());

Log.d("test","postlar bos degil");

TextView postTitle = (TextView) view.findViewById(R.id.title);
TextView postBody = (TextView) view.findViewById(R.id.body);
postTitle.setText(posts.getTitle());
postBody.setText(posts.getBody());






return view;
}




}

课后:

public class Post {


String title;
String body;

public Post(String title,String body){

this.title = title;
this.body = body;


}
public String getTitle() {
return title;
}

public String getBody() {
return body;
}


}

post_row.xml :

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="14dp"
android:layout_marginStart="14dp"
android:layout_marginTop="20dp"
android:text="" />

<TextView
android:id="@+id/body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/title"
android:layout_alignStart="@+id/title"
android:layout_below="@+id/title"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:layout_marginTop="15dp"
android:text="" />
</RelativeLayout>

forum_entries.xml(我要填充的 ListView 在这里)

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView
android:id="@+id/categoryPostsListView"
android:layout_width="339dp"
android:layout_height="382dp"
android:layout_below="@+id/categoryName"
android:layout_centerHorizontal="true"
android:layout_marginTop="26dp"></ListView>


<Button
android:id="@+id/add_entry_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/categoryPostsListView"
android:layout_centerHorizontal="true"
android:layout_marginTop="17dp"
android:text="Add Entry"
/>

<TextView
android:id="@+id/categoryName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="17dp"
android:text="TextView"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="16dp" />
</RelativeLayout>

最佳答案

您在 onCreate 方法中设置的布局与 ListView 所在的布局不同:

super.onCreate(savedInstanceState);
setContentView(R.layout.forum_user_post);
categoryName = (String) getIntent().getSerializableExtra("incomingcategory");
View forum_entries = getLayoutInflater().inflate(R.layout.forum_entries, null, false);
postlistview = (ListView) forum_entries.findViewById(R.id.categoryPostsListView);

Activity 膨胀的布局是 forum_user_post.xml,但您的 ListView 显然在 forum_entries.xml 中。您的 Activity 有另一种布局,所以这就是您看不到 ListView 的原因。

尝试设置正确的布局:

setContentView(R.layout.forum_entries);
postlistview = (ListView)findViewById(R.id.categoryPostsListView);

或者只需将您的 ListView 添加到 forum_user_post.xml,因为它是您的大部分 View 所在的位置。如果你这样做,那么使用:

setContentView(R.layout.forum_user_post);
postlistview = (ListView)findViewById(R.id.categoryPostsListView);

如果您想将列表保留在另一个布局文件中,没问题,但您需要将其包含在主布局文件中,请在 forum_user_post.xml 文件中使用 include 标签:

 <include layout="@layout/forum_entries"/>

关于java - 无法填充 ListView 未调用 getView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50202006/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com