2016-08-05 13 views
0

Ich habe einen Service und eine Aktivität in meiner Anwendung. Der Dienst erwirbt eine Zeichenfolge durch die Aktion des Benutzers und diese Zeichenfolge wird an die Aktivität übergeben. Hier erhalte ich den Stringwert für die Aktivität erfolgreich und zeigt ihn auf dem Aktivitätsbildschirm an.Anzeige String-Daten in ListView als String Wert ändert sich jeden Yime

Ich habe eine Listview in Aktivität und die String-Werte sollten in dieser Liste geordnet angezeigt werden. Mein Problem ist, dass ich nur ein Element in der Listenansicht anzeigen kann, die gerade eingegeben wurde. Die zuvor eingegebenen Zeichenfolgen werden nicht angezeigt.

Also jedes Mal, wenn ich Zeichenfolge vom Dienst abrufen muss und diese Zeichenfolge in ListView zusammen mit vorherigen Listenelementen angezeigt werden sollte. Bitte helfen Sie mir .. danke.

Meine Tätigkeit ist ...

public class MainActivity extends AppCompatActivity { 


String pichi; 
SharedPreferences pref=null; 
ListView list; 
private ArrayList<String> strArray; 
int i; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    list=(ListView)findViewById(R.id.offlineList); 

    pref= PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    pichi=pref.getString("KEY","default"); 

    strArray=new ArrayList<String>(); 
    if (strArray.contains(pichi)){ 
     Toast.makeText(getApplicationContext(),"Link already exists",Toast.LENGTH_LONG).show(); 
    }else { 
     int count = list.getCount(); 
     for (i = 0; i < count; i++) { 
      strArray.add("Row" + i); 
     } 
     final ArrayAdapter<String> adapter = new ArrayAdapter<String> 
       (MainActivity.this, android.R.layout.simple_list_item_1, strArray); 
     if (!list.equals(i)) { 
      strArray.add(pichi); 
      adapter.notifyDataSetChanged(); 
     } 
     list.setAdapter(adapter); 
    } 

} 

public void startService(View view) { 
    startService(new Intent(MainActivity.this, CheckService.class)); 

} 

}

wo Startservice (Ansicht Ansicht) gedrückt wird eine Aktion der Taste.

Mein Service ist ....

public class CheckService extends Service { 


public CheckService() { 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO: Return the communication channel to the service. 
    throw new UnsupportedOperationException("Not yet implemented"); 
} 

String a; 
Intent dialogIntent; 

public void onCreate() { 
    super.onCreate(); 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("LocalService", "Received Start id" + startId + ":" + intent); 

    final ClipboardManager clipboard = (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE); 
    clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() { 
     public void onPrimaryClipChanged() { 
      a = clipboard.getText().toString(); 
      if (Patterns.WEB_URL.matcher(a).matches()){ 

       dialogIntent = new Intent(CheckService.this, DialogActivity.class); 
       dialogIntent.putExtra("text",a); 
       dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(dialogIntent); 
     } 
      else if (!URLUtil.isValidUrl(a)){ 
      // Toast.makeText(CheckService.this, "text is not a url link", Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
    return super.onStartCommand(intent, flags, startId); 

} 


@Override 
public void onStart(Intent intent, int startId) { 
    // Perform your long running operations here. 
// Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
} 

@Override 
public void onDestroy() { 
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); 
    stopService(dialogIntent); 
} 

}

Im Dienst i einen Alarm-Dialog haben, von wo aus ich den String-Wert bekommen kann ...

My Dialog Aktivität ist .....

public class DialogActivity extends Activity{ 

AlertDialog alert; 
String receivedText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle bundle=getIntent().getExtras(); 
    receivedText=bundle.getString("text","default"); 

    final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder 
      .setTitle("yoLobee") 
      .setMessage("save to yoLobee offline..?") 
      .setIcon(R.drawable.logo) 
      .setCancelable(true) 
      .setNeutralButton("SHARE", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        Intent sendIntent = new Intent(); 
        sendIntent.setAction(Intent.ACTION_SEND); 
        sendIntent.putExtra(Intent.EXTRA_TEXT, receivedText); 
        sendIntent.setType("text/plain"); 
        startActivity(Intent.createChooser(sendIntent,receivedText)); 
       } 
      }) 
      .setNegativeButton("NO", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        alert.dismiss(); 
        alert.dismiss(); 
        builder.setCancelable(true); 
       } 
      }) 
      .setPositiveButton("YES", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        Toast.makeText(DialogActivity.this, "Link saved to yoLobee..", Toast.LENGTH_LONG).show(); 
        SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
        SharedPreferences.Editor edit = pref.edit(); 
        edit.putString("KEY",receivedText); 
        edit.commit(); 
       //  edit.apply(); 

       } 
      }); 

    alert = builder.create(); 
    alert.setCanceledOnTouchOutside(true); 
    setFinishOnTouchOutside(true); 
    alert.setCancelable(true); 
    alert.show(); 
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
    lp.copyFrom(alert.getWindow().getAttributes()); 
    lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
    lp.height = WindowManager.LayoutParams.WRAP_CONTENT; 
    Window window = alert.getWindow(); 
    WindowManager.LayoutParams wlp = window.getAttributes(); 
    wlp.gravity = Gravity.TOP; 
    wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; 
    window.setAttributes(wlp); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN) { 
     alert.cancel(); 
     alert.dismiss(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    alert.cancel(); 
    alert.dismiss(); 
} 

}

Also von der Dialogaktivität bekomme ich den Stringwert und zeige in der Liste an. Die Liste zeigt nur den letzten Zeichenfolgenwert aus dem Dienst an, da sie jeweils einen Wert erhält. Ich möchte, dass die Liste eine Liste von Strings anzeigt, die vom Service zurückgeliefert werden.

+0

bitte posten Sie Ihren Adapter-Code ... – Kushan

+0

Ich habe keinen Adapter-Code ... Ich verwende Array-Adapter als Adapter, um Elemente in Listview anzuzeigen. Da ich denke, dass der Adapter Array-Daten in der Liste anzeigen soll, müssen die Array-Daten gut funktionieren. –

+0

Ich habe nicht viel Wissen darüber, wenn es irgendwelche Änderungen gibt, die ich gemacht werden muss, plz suggerieren Sie mich. –

Antwort

0

Ich denke, diese Linie int count = list.getCount(); in onCreate gibt 0 zurück, weil Sie bisher keinen Artikel zu list hinzugefügt haben.

+0

Ja, ich habe keine Einträge hinzugefügt, das ist mein Problem. Jedes Mal, wenn ich die Zeichenfolge an strArray übergebe, wird nur dieses Element angezeigt. Die äußerste Liste enthält nur ein Element. wie man eine Array-Liste von Strings erstellt .... von meinem übergebenen Wert. –

+0

Überprüfen Sie http://stacktips.com/tutorials/android/creating-a-background-service-in-android. Wenn Sie Service und Update-Liste verwenden möchten, sollten Sie auch den Empfänger verwenden. – faranjit

0

Es wird hilfreich sein, wenn Sie ein Stück Code zur Verfügung stellen. Wenn Sie Ihr Problem lesen, scheint es, dass Sie das Array, das Sie zum Auffüllen der Liste verwenden, nicht mehr schreiben.

Holen Sie sich die Zeichenfolge aus der Aktivität und fügen Sie sie in das Array, das Sie verwenden, um Listenansicht anzuzeigen, und rufen Sie notifyDataSetChanged() auf. Es wird funktionieren

+0

Ich versuchte auch notifyDataSetChanged() aufzurufen. Es hat nicht funktioniert. wie man die string in array hinzufügt, um listview anzuzeigen und dieses array sollte alle werte enthalten, wenn ich jedesmal eine neue string eintrage. –