Ich habe eine Listenansicht in Android erstellt und ich möchte etwas wie jedes Mal tun, wenn ich auf ein Listenelement klicke, muss es zwischen rot und grün wechseln. Ich konnte das erreichen, aber das Problem ist, dass jedes Mal, wenn ich die Listenansicht nach oben oder unten scrolle, die Listenelemente immer wieder neu geladen werden und die getoggten Farben verloren gehen.ListView wird jedes Mal neu geladen, wenn ich scroll, was ich nicht will
Ich habe versucht, mit einem Toggle-Button, anstatt nur manuell die Farbe einzustellen, aber auch das verliert seinen Zustand. Wenn der Benutzer darauf klickt, wird der Status aktiviert und wenn der Benutzer nach oben oder unten scrollt, verliert er seinen Status und zeigt den Status "Aus" an.
Das ist mein MainActivity.java Datei
package bk.acs;
import android.content.Context;
import android.graphics.Color;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
ListView listView;
final String chars[] = new String[20];
final int arr[]=new int[20];
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for(int i=0;i<20;i++)
{
chars[i]="15BEC058"+i;
}
Arrays.fill(arr,1);
listView=(ListView)findViewById(R.id.row);
MyAdapter adapter =new MyAdapter(this,chars);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView adapterView, View view, int i, long l) {
arr[i]=(arr[i]==0)?(1):(0);
String res=(arr[i]==0)?("Absent"):("Present");
if(arr[i]==0)
{
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.setBackgroundColor(getResources().getColor(R.color.item_red));
}
});
}
if(arr[i]==1)
{
view.setBackgroundColor(getResources().getColor(R.color.item_green));
}
Toast.makeText(MainActivity.this, "Marked "+chars[i]+" as "+res, Toast.LENGTH_SHORT).show();
}
});
}
}
Und hier ist mein Adapter:
class MyAdapter extends ArrayAdapter
{
View row;
TextView tv;
String titles[];
public MyAdapter(Context context , String[] titles)
{
super(context,R.layout.reg_li,R.id.reg_no,titles);
this.titles=titles;
}
@NonNull
@Override
public View getView(int position , View controlView , ViewGroup parent)
{
LayoutInflater inflater=(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(R.layout.reg_li,parent,false);
tv=(TextView)row.findViewById(R.id.reg_no);
tv.setText(titles[position]);
return row;
}
}
Vielen Dank für die Angabe, dass Sie Ihren Code einfügen. Nun, wo ist es? –
jetzt habe ich Code gehalten, bitte sehen Sie es ... –
Frage klären und externen Code in Frage stellen. –