java - क्लिक किए जाने पर सूचीव्यू पंक्तियों के चयन पंक्तियों के साथ एक सूची दृश्य बनाएं/पृष्ठभूमि रंग बदलें



android android-listview (1)

उपाय

इस समस्या का समाधान बहुत सरल है। हमें क्लिक करने के लिए सुनने के लिए और तदनुसार जवाब देने के लिए हमारे ListView पर एक OnItemClickListener जोड़ने की आवश्यकता है।

इसलिए, onCreate() विधि में, एक बार आपने यह सुनिश्चित कर लिया है कि आप डेटा सेट करना खाली नहीं है, तो आप क्लिक करने के लिए सुनने के लिए onItemClick() विधि को ओवरराइड करना चाहते हैं और रंग बदल सकते हैं। आप भी बाद के चरणों के लिए चुने गए आइटम का ट्रैक रखना चाहते हैं, इसलिए public int selectionId = -1; जोड़ें public int selectionId = -1; आपकी कक्षा के शीर्ष पर इसके अलावा, आपको सूची ListAdapter को यह बताने की आवश्यकता होगी कि आपने कॉलिंग के द्वारा कुछ बदल दिया है ((SimpleAdapter) getListAdapter()).notifyDataSetChanged()

if(receiverList.size() != 0) {
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int index, long id) {
            view.setBackgroundColor(Color.RED);
            TextView receiverIdTextView = (TextView) view.findViewById(R.id.receiverId);
            selectionId = Integer.valueOf(receiverIdTextView.getText().toString());
            ((SimpleAdapter) getListAdapter()).notifyDataSetChanged();
         }

    });
    SimpleAdapter adapter = getNewAdapter();
    setListAdapter(adapter);

}

महान! अब हमारे पास एक कार्य प्रणाली है जो आपके द्वारा टैप करने वाली पंक्ति का रंग बदल जाएगा। लेकिन हम अभी तक नहीं किया है हमें यह सुनिश्चित करने की आवश्यकता है कि पिछला चयन सामान्य रंग में बदलता है

इसके लिए, हम SimpleAdapter की getView() पद्धति को ओवरराइड का उपयोग करने जा रहे हैं, जिसे हर ListView में कहा जाता है, ListView में प्रदर्शित होने वाले आइटम को आकर्षित करने के लिए जाता है।

यह केवल वास्तव में उन वस्तुओं को दिखाता है जिनकी जरूरत है - जिन्हें आप देख सकते हैं यह आपकी स्क्रीन के ऊपर या नीचे वाले लोगों को प्रस्तुत नहीं करता है। इसलिए यदि आपके पास एक ListView में 200 आइटम हैं, तो केवल 5 या 6, आपकी स्क्रीन के आकार और वस्तुओं के आकार के आधार पर, एक समय में प्रस्तुत किया जा रहा है।

getView() पद्धति को ओवरराइड करने के लिए, जहां आप adapter इनिशियलाइज़ करना शुरू करते हैं और इस पर कोड बदलते हैं:

SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,receiverList, R.layout.receiver_entry, new String[] { "receiverId","receiverName", "fullPath"}, new int[] {R.id.receiverId, R.id.receiverName, R.id.fullPath}) {
    @Override
    public View getView (int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        TextView receiverIdTextView = (TextView) view.findViewById(R.id.receiverId);
        if(receiverIdTextView.getText().toString().equals(String.valueOf(selectionId))) {
            view.setBackgroundColor(Color.RED);
        } else {
            view.setBackgroundColor(Color.WHITE);
        }
        return view;
    }
};

हर बार पंक्तियों में से एक खींचा जाता है, क्योंकि getView() को कॉल किया जाएगा, getView() यह जांच करेगा कि वर्तमान view में आपके द्वारा चयनित पंक्ति का आईडी है या नहीं। अगर ऐसा नहीं होता है, तो यह पृष्ठभूमि रंग को सफेद रंग में बदल देगा। अगर ऐसा होता है, तो यह पृष्ठभूमि रंग को लाल रंग में बदल देगा।

और वोला! बस! अब जब आप ListView में किसी आइटम पर क्लिक करते हैं, तो आप पृष्ठभूमि रंग को लाल रंग में सेट कर रहे हैं।

अंतिम कोड

MainActivity.java:

public class MainActivity extends ListActivity {
    DBTools dbTools = new DBTools(this);

    ArrayList<HashMap<String, String>> receiverList;

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

        receiverList = dbTools.getAllReceivers();
        dbTools.close();
        ListView listView = getListView();
        if(receiverList.size() != 0) {
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int index, long id) {
                    view.setBackgroundColor(Color.RED);
                    TextView receiverIdTextView = (TextView) view.findViewById(R.id.receiverId);
                    selectionId = Integer.valueOf(receiverIdTextView.getText().toString());
                    ((SimpleAdapter) getListAdapter()).notifyDataSetChanged();
                 }

            });

            SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,receiverList, R.layout.receiver_entry, new String[] { "receiverId","receiverName", "fullPath"}, new int[] {R.id.receiverId, R.id.receiverName, R.id.fullPath}) {
                @Override
                public View getView (int position, View convertView, ViewGroup parent) {
                    View view = super.getView(position, convertView, parent);
                    TextView receiverIdTextView = (TextView) view.findViewById(R.id.receiverId);
                    if(receiverIdTextView.getText().toString().equals(String.valueOf(selectionId))) {
                        view.setBackgroundColor(Color.RED);
                    } else {
                        view.setBackgroundColor(Color.WHITE);
                    }
                    return view;
                }
            };
            setListAdapter(adapter);
        }
    }
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/black" >

        <TextView
            android:id="@+id/titleTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="My List" />

    </TableRow>

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/black"
            android:id="@android:id/list" />
</TableLayout>

receiver_entry.xml

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tableRow" >

    <TextView
        android:id="@+id/receiverId"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <TextView
        android:id="@+id/receiverName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Robotronics" />

    <TextView
        android:id="@+id/fullPath"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="123.45.678.910:8088/robtrox/find" />

</TableRow>

मुसीबत

मैं चयन वस्तुओं के साथ एक ListView बनाने की कोशिश कर रहा हूँ। मैं ListView में किसी आइटम पर क्लिक करने में सक्षम होना चाहता हूं और ListView में आइटम का रंग बदलना चाहते हैं, और फिर आगे बढ़ें और पंक्ति से डेटा के साथ कुछ और करें

मैं एक SimpleAdapter का उपयोग कर रहा हूँ।

मैं इसे कैसे बनाऊं, जब मैं एक पंक्ति पर टैप करता हूँ, यह एक अलग रंग बदल जाता है, और फिर जब मैं एक अलग पंक्ति पर टैप करता हूं, नई पंक्ति का चयन किया जाता है और एक नया रंग बदल जाता है, और पुरानी पंक्ति सामान्य में वापस बदलती है ?

कोड

यहाँ मेरा कोड अब तक है DBTools वर्ग में सभी डेटा है जो मैं अपने ListView में प्रदर्शित किया जाना चाहता हूँ संगठित और देखभाल की। getAllReceivers() पद्धति getAllReceivers() HashMap<String, String> एस का एक ArrayList देता है जो मेरे सभी डेटा का उपयोग करते हैं

MainActivity.java:

public class MainActivity extends ListActivity {
    DBTools dbTools = new DBTools(this);

    ArrayList<HashMap<String, String>> receiverList;

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

        receiverList = dbTools.getAllReceivers();
        dbTools.close();
        ListView listView = getListView();
        if(receiverList.size() != 0) {

            SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,receiverList, R.layout.receiver_entry, new String[] {"receiverId","receiverName", "fullPath"}, new int[] {R.id.receiverId, R.id.receiverName, R.id.fullPath});
            setListAdapter(adapter);
        }
    }
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>

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

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/black" >

        <TextView
            android:id="@+id/titleTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="My List" />

    </TableRow>

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/black"
            android:id="@android:id/list" />

</TableLayout>

receiver_entry.xml

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tableRow" >

    <TextView
        android:id="@+id/receiverId"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <TextView
        android:id="@+id/receiverName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Robotronics" />

    <TextView
        android:id="@+id/fullPath"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="123.45.678.910:8088/robtrox/find" />


</TableRow>




selection