onClickListner 中的 ArrayAdapter 不工作
ArrayAdapter in an onClickListner is not working
我在这里要做的是在用户单击按钮时使用 ArrayList<String>
和 ArrayAdapter<String>
显示字符串列表。我想声明所有成员,即 adapter、ArrayList 和 list layout 为 global 因为我想稍后添加更多具有显示字符串列表功能的按钮。
此代码没有错误,但无法正常工作。我将 Toast
放在 onClick
中以确保 onClick
正常工作。我能看到吐司,但看不到我想看的listView
。
class 文件
R.id.button_news
是按钮 id。 R.layout.activity_primary_content
是我在此 class PrimaryContent
中使用的布局
R.layout.list_view_secondary
是listViewR.id.list_view
所在的布局
R.layout.list_view_secondary
布局和 PrimaryContent
class 不相关,但我想使用 list_view_secondary
布局中的 listView
来显示PrimaryContent
.
在这行代码中
arrayAdapter = new ArrayAdapter<>(view.getContext(),android.R.layout.simple_list_item_1,list);
我试过将上下文 view.getContext()
和 getBaseContext()
都不起作用。
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class PrimaryContent extends AppCompatActivity {
private final String LOG_TAG = PrimaryContent.class.getSimpleName();
public ListView listView;
public ArrayList<String> arrayList;
public ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_primary_content);
final LayoutInflater factory = getLayoutInflater();
final View rootView = factory.inflate(R.layout.list_view_secondary, null);
listView = rootView.findViewById(R.id.list_view);
arrayList = new ArrayList<>();
for (int i=0; i<20; i++) {
arrayList.add("World News");
}
Button news = findViewById(R.id.button_news);
news.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getBaseContext(),"Damn",Toast.LENGTH_SHORT).show();
for (String x: arrayList) {
Log.v(LOG_TAG,x);
System.out.println();
}
arrayAdapter = new ArrayAdapter<>(view.getContext(),android.R.layout.simple_list_item_1,arrayList);
listView.setAdapter(arrayAdapter);
}
});
}
}
R.layout.list_view_secondary
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="true"
android:orientation="vertical" />
您忘记将膨胀布局添加到您的父布局中,例如:
LinearLayout parentLayout = (LinearLayout) findViewById(R.id.parent_layout);
parentLayout.addView(rootView);
我在这里要做的是在用户单击按钮时使用 ArrayList<String>
和 ArrayAdapter<String>
显示字符串列表。我想声明所有成员,即 adapter、ArrayList 和 list layout 为 global 因为我想稍后添加更多具有显示字符串列表功能的按钮。
此代码没有错误,但无法正常工作。我将 Toast
放在 onClick
中以确保 onClick
正常工作。我能看到吐司,但看不到我想看的listView
。
class 文件
R.id.button_news
是按钮 id。 R.layout.activity_primary_content
是我在此 class PrimaryContent
R.layout.list_view_secondary
是listViewR.id.list_view
所在的布局
R.layout.list_view_secondary
布局和 PrimaryContent
class 不相关,但我想使用 list_view_secondary
布局中的 listView
来显示PrimaryContent
.
在这行代码中
arrayAdapter = new ArrayAdapter<>(view.getContext(),android.R.layout.simple_list_item_1,list);
我试过将上下文 view.getContext()
和 getBaseContext()
都不起作用。
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class PrimaryContent extends AppCompatActivity {
private final String LOG_TAG = PrimaryContent.class.getSimpleName();
public ListView listView;
public ArrayList<String> arrayList;
public ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_primary_content);
final LayoutInflater factory = getLayoutInflater();
final View rootView = factory.inflate(R.layout.list_view_secondary, null);
listView = rootView.findViewById(R.id.list_view);
arrayList = new ArrayList<>();
for (int i=0; i<20; i++) {
arrayList.add("World News");
}
Button news = findViewById(R.id.button_news);
news.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getBaseContext(),"Damn",Toast.LENGTH_SHORT).show();
for (String x: arrayList) {
Log.v(LOG_TAG,x);
System.out.println();
}
arrayAdapter = new ArrayAdapter<>(view.getContext(),android.R.layout.simple_list_item_1,arrayList);
listView.setAdapter(arrayAdapter);
}
});
}
}
R.layout.list_view_secondary
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="true"
android:orientation="vertical" />
您忘记将膨胀布局添加到您的父布局中,例如:
LinearLayout parentLayout = (LinearLayout) findViewById(R.id.parent_layout);
parentLayout.addView(rootView);