如果我们必须使用自定义适配器创建第二个 activity,如何更改启动器 activity?
How to change launcher activity if We have to create second activity with custom adapter?
我想更改我的启动器 activity.My 首先创建 activity 有 select 可用 listview.When 用户第一次打开应用程序;他将 select 人然后我的第二个创建 activity 这些 selected 人来我的自定义 listview.My 问题是;如何更改启动器 activity 因为在我的第二个 activity 有自定义列表视图,如果用户不点击任何人,我的第二个 activity 将是空的,所以我得到错误 message.How 我可以解决这个问题吗?
我的第一个 activity :
public class MainActivity extends AppCompatActivity {
ArrayList<String> selectedlistisim = new ArrayList<>();
int girisyazısıcount = 2 ;
ArrayList<String> listte = new ArrayList<String>();
String phonenumber;
ArrayList<String> selectedlist = new ArrayList<>();
ListView chosinglist;
Button kaydet ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
kaydet = (Button) findViewById(R.id.kaydet);
chosinglist = (ListView) findViewById(R.id.chosing);
chosinglist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
getNumber(this.getContentResolver());
}
private void getNumber(ContentResolver contentResolver) {
Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phonenumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
System.out.println(".................."+phonenumber);
listte.add(phonenumber);
}
phones.close();// close cursor
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.checkrow,
R.id.checkedTextView2,listte);
kaydet.setEnabled(false);
chosinglist.setAdapter(adapter);
chosinglist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selecteditem = ((TextView)view).getText().toString();
if (selectedlist.contains(selecteditem)){
selectedlist.remove(selecteditem);
}else selectedlist.add(selecteditem);
if (selectedlist.size() >= 5 && selectedlist.size() < 16 ) {
kaydet.setEnabled(true);
}
if (selectedlist.size() == 16){
kaydet.setEnabled(false);
}
if (selectedlist.size() == 4){
kaydet.setEnabled(false);
}
kaydet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, AnaMenu.class);
i.putStringArrayListExtra("listem",selectedlist);
startActivity(i);
Toast.makeText(MainActivity.this, "abc.", Toast.LENGTH_LONG).show();
MainActivity.this.finish();
}
});
}
});
}
}
我的第二个 Activity :
public class AnaMenu extends AppCompatActivity {
public static final int MENU_Ara = Menu.FIRST + 1;
OyunTextView oyunTextView;
static final int AnketDegerlendirmesi = 1337;
int selectedPosition ;
String[] afteractivitydialogitems;
int toplamaislemi;
String[] dialogdegerleri;
boolean[] dialogcheckeditems;
String toast;
TextView sayılar;
ListView liste;
int a = 60 ;
ArrayList<String> kullanıcısayıdegerlistesi = new ArrayList<>();
ArrayList<Integer> mUserselecteditems = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ana_menu);
liste = (ListView) findViewById(R.id.oyun);
//Adapter im.
oyunTextView = new OyunTextView();
liste.setAdapter(oyunTextView);
registerForContextMenu(liste);
afteractivitydialogitems = getResources().getStringArray(R.array.anket);
dialogcheckeditems = new boolean[afteractivitydialogitems.length];
dialogdegerleri = getResources().getStringArray(R.array.anketdeğer);
//show the first activity when First time launched application.
SharedPreferences prefs = this.getSharedPreferences("MyAppPrefs", MODE_PRIVATE);
boolean settingsFilled = prefs.getBoolean("SettingsFilled", false);
if (!settingsFilled){
Intent sa = new Intent(AnaMenu.this,MainActivity.class);
startActivity(sa);
SharedPreferences pr = this.getSharedPreferences("MyAppPrefs", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("SettingsFilled", true);
editor.commit();
}
}
class OyunTextView extends BaseAdapter {
@Override
public int getCount() {
Intent i = getIntent();
final ArrayList<String> secilmis = i.getStringArrayListExtra("listem");
return secilmis.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = getLayoutInflater().inflate(R.layout.oyuntextview, null);
TextView namesbox = (TextView) convertView.findViewById(R.id.isim);
sayılar = (TextView) convertView.findViewById(R.id.sayı);
Intent i = getIntent();
final ArrayList<String> secilmis = i.getStringArrayListExtra("listem");
for (int defa = 0; defa < secilmis.size(); defa++) {
kullanıcısayıdegerlistesi.add("50");
// if (kullanıcısayıdegerlistesi.contains("50")){sayılar.setTextColor(getResources().getColor(R.color.elli));}
}
namesbox.setText(secilmis.get(position));
sayılar.setText(kullanıcısayıdegerlistesi.get(position));
sayılar.setTextColor(getResources().getColor(R.color.elli));
convertView.setBackgroundColor(getResources().getColor(R.color.yüz));
return convertView;
}
}
因此,要修复空列表错误,只需尝试这样做:
kaydet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(selectedlist.size()>0){
Intent i = new Intent(MainActivity.this, AnaMenu.class);
i.putStringArrayListExtra("listem",selectedlist);
startActivity(i);
Toast.makeText(MainActivity.this, "abc.", Toast.LENGTH_LONG).show();
MainActivity.this.finish();
}else{
Toast.makeText(MainActivity.this, "No itens added", Toast.LENGTH_LONG).show();
}
}
});
This check if list not have itens and if not show text, if yes转到下一个activity.
For open second activity instead of first, 如果用户第二次启动 activity 执行此逻辑,在 中首先 activity 在 super.oncreate() 之前检查数据库是否有数据如果有则开始 second activity,如果数据库为空则什么都不做。
我的逻辑示例:
@Override
protected void onCreate(Bundle savedInstanceState) {
//here you check if database has data
if(hasdata){
//start second activity
}
super.onCreate(savedInstanceState);
//Or if you want you can put logic here is the same
setContentView(R.layout.activity_loginactivity);
//Not put here below setcontentview!!!!
}
所以在之前创建activity检查数据库是否有数据和如果是,请转到其他 activity,因为 activity 未创建且 layout 尚未添加,因为用户与单击启动器图标时打开第二个 activity 相同。
public class 登录Activity 扩展 Activity {
对您最有帮助的是尝试像这里一样在 Oncreate 中添加以下行。
这将检查列表是否为空,如果是,则将重定向到列表 activity 否则继续。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//add some code to detect if parent is selected
if (parent == null){
Intent in = new Intent(SecondActivity.this, PersonAcrivity.class);
startActivity(in);
}
我想更改我的启动器 activity.My 首先创建 activity 有 select 可用 listview.When 用户第一次打开应用程序;他将 select 人然后我的第二个创建 activity 这些 selected 人来我的自定义 listview.My 问题是;如何更改启动器 activity 因为在我的第二个 activity 有自定义列表视图,如果用户不点击任何人,我的第二个 activity 将是空的,所以我得到错误 message.How 我可以解决这个问题吗?
我的第一个 activity :
public class MainActivity extends AppCompatActivity {
ArrayList<String> selectedlistisim = new ArrayList<>();
int girisyazısıcount = 2 ;
ArrayList<String> listte = new ArrayList<String>();
String phonenumber;
ArrayList<String> selectedlist = new ArrayList<>();
ListView chosinglist;
Button kaydet ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
kaydet = (Button) findViewById(R.id.kaydet);
chosinglist = (ListView) findViewById(R.id.chosing);
chosinglist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
getNumber(this.getContentResolver());
}
private void getNumber(ContentResolver contentResolver) {
Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phonenumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
System.out.println(".................."+phonenumber);
listte.add(phonenumber);
}
phones.close();// close cursor
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.checkrow,
R.id.checkedTextView2,listte);
kaydet.setEnabled(false);
chosinglist.setAdapter(adapter);
chosinglist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selecteditem = ((TextView)view).getText().toString();
if (selectedlist.contains(selecteditem)){
selectedlist.remove(selecteditem);
}else selectedlist.add(selecteditem);
if (selectedlist.size() >= 5 && selectedlist.size() < 16 ) {
kaydet.setEnabled(true);
}
if (selectedlist.size() == 16){
kaydet.setEnabled(false);
}
if (selectedlist.size() == 4){
kaydet.setEnabled(false);
}
kaydet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, AnaMenu.class);
i.putStringArrayListExtra("listem",selectedlist);
startActivity(i);
Toast.makeText(MainActivity.this, "abc.", Toast.LENGTH_LONG).show();
MainActivity.this.finish();
}
});
}
});
}
}
我的第二个 Activity :
public class AnaMenu extends AppCompatActivity {
public static final int MENU_Ara = Menu.FIRST + 1;
OyunTextView oyunTextView;
static final int AnketDegerlendirmesi = 1337;
int selectedPosition ;
String[] afteractivitydialogitems;
int toplamaislemi;
String[] dialogdegerleri;
boolean[] dialogcheckeditems;
String toast;
TextView sayılar;
ListView liste;
int a = 60 ;
ArrayList<String> kullanıcısayıdegerlistesi = new ArrayList<>();
ArrayList<Integer> mUserselecteditems = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ana_menu);
liste = (ListView) findViewById(R.id.oyun);
//Adapter im.
oyunTextView = new OyunTextView();
liste.setAdapter(oyunTextView);
registerForContextMenu(liste);
afteractivitydialogitems = getResources().getStringArray(R.array.anket);
dialogcheckeditems = new boolean[afteractivitydialogitems.length];
dialogdegerleri = getResources().getStringArray(R.array.anketdeğer);
//show the first activity when First time launched application.
SharedPreferences prefs = this.getSharedPreferences("MyAppPrefs", MODE_PRIVATE);
boolean settingsFilled = prefs.getBoolean("SettingsFilled", false);
if (!settingsFilled){
Intent sa = new Intent(AnaMenu.this,MainActivity.class);
startActivity(sa);
SharedPreferences pr = this.getSharedPreferences("MyAppPrefs", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("SettingsFilled", true);
editor.commit();
}
}
class OyunTextView extends BaseAdapter {
@Override
public int getCount() {
Intent i = getIntent();
final ArrayList<String> secilmis = i.getStringArrayListExtra("listem");
return secilmis.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = getLayoutInflater().inflate(R.layout.oyuntextview, null);
TextView namesbox = (TextView) convertView.findViewById(R.id.isim);
sayılar = (TextView) convertView.findViewById(R.id.sayı);
Intent i = getIntent();
final ArrayList<String> secilmis = i.getStringArrayListExtra("listem");
for (int defa = 0; defa < secilmis.size(); defa++) {
kullanıcısayıdegerlistesi.add("50");
// if (kullanıcısayıdegerlistesi.contains("50")){sayılar.setTextColor(getResources().getColor(R.color.elli));}
}
namesbox.setText(secilmis.get(position));
sayılar.setText(kullanıcısayıdegerlistesi.get(position));
sayılar.setTextColor(getResources().getColor(R.color.elli));
convertView.setBackgroundColor(getResources().getColor(R.color.yüz));
return convertView;
}
}
因此,要修复空列表错误,只需尝试这样做:
kaydet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(selectedlist.size()>0){
Intent i = new Intent(MainActivity.this, AnaMenu.class);
i.putStringArrayListExtra("listem",selectedlist);
startActivity(i);
Toast.makeText(MainActivity.this, "abc.", Toast.LENGTH_LONG).show();
MainActivity.this.finish();
}else{
Toast.makeText(MainActivity.this, "No itens added", Toast.LENGTH_LONG).show();
}
}
});
This check if list not have itens and if not show text, if yes转到下一个activity.
For open second activity instead of first, 如果用户第二次启动 activity 执行此逻辑,在 中首先 activity 在 super.oncreate() 之前检查数据库是否有数据如果有则开始 second activity,如果数据库为空则什么都不做。
我的逻辑示例:
@Override
protected void onCreate(Bundle savedInstanceState) {
//here you check if database has data
if(hasdata){
//start second activity
}
super.onCreate(savedInstanceState);
//Or if you want you can put logic here is the same
setContentView(R.layout.activity_loginactivity);
//Not put here below setcontentview!!!!
}
所以在之前创建activity检查数据库是否有数据和如果是,请转到其他 activity,因为 activity 未创建且 layout 尚未添加,因为用户与单击启动器图标时打开第二个 activity 相同。
public class 登录Activity 扩展 Activity {
对您最有帮助的是尝试像这里一样在 Oncreate 中添加以下行。
这将检查列表是否为空,如果是,则将重定向到列表 activity 否则继续。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//add some code to detect if parent is selected
if (parent == null){
Intent in = new Intent(SecondActivity.this, PersonAcrivity.class);
startActivity(in);
}