Проблема с представлением переработчика во фрагменте - PullRequest
0 голосов
/ 18 марта 2020

Я новичок ie в Kotlin, и у меня возникла проблема с представлением переработчика во фрагменте. Переработчик не показывает, и я не знаю почему. Это MainActivity, где фрагмент:

 package com.example.example

import android.content.Context
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupWithNavController
import com.android.volley.Request
import com.android.volley.Response
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import com.google.android.material.bottomnavigation.BottomNavigationView
import org.json.JSONObject
import java.lang.Math.E


class MainActivity : AppCompatActivity() {

    companion object{
        //controllo del login automatico
        var checkLog: String? = String()

        //url 
        var url: String? = String()

        //variabili del login
        var dominio: String? = String()
        var token: String? = String()
        var nome: String? = String()
        var status: String? = String()
        var email: String? = String()

        //variabili traffic
        var totalClicksTraffic: String? = String()
        var totalBlockedTraffic: String? = String()
        var totalClickAdwordsTraffic: String? = String()
        var clickArray: List<TrafficClick> = arrayListOf()
        var clickCountTraffic: String? = String()

        //variabili change button traffic
        var changeDataTraffic: String? = String()
        var clicksNumber: Int = 0
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //dichiaro lo sharedpreferences
        val sharedPreferences = this.getSharedPreferences("TOKEN_FILE", Context.MODE_PRIVATE)

        //dichiato l'editor per modificare gli sharedpreferences
        var editorMain  = sharedPreferences.edit()

        Log.d("Test", "Eccomi qui--- $changeDataTraffic")
        editorMain.putString("changeDataTraffic", MainActivity.changeDataTraffic)
        editorMain.apply()



        //RICHIESTA PER LA DASHBOARD DI PAGINA TRAFFIC-------------------------------------------------------------

        //richiesta da fare con il volley
        val queue = Volley.newRequestQueue(this)

        val endPointTraffic = "homeApp?"

        val requestUrl =  sharedPreferences.getString("URL", "") + endPointTraffic + "token=" + sharedPreferences.getString("TOKEN", "") + "&filter=" + MainActivity.changeDataTraffic

            val stringRequest = StringRequest(
                Request.Method.GET,
                requestUrl,
                Response.Listener<String> { response ->
                    Log.d("Test", "PERFETTO ---- $response")

                    val jsonObj: JSONObject = JSONObject(response.toString())

                    //prelevo le variabili del json array portandole in stringa
                    val status = jsonObj.getInt("status")
                    val clicks = jsonObj.getJSONArray("clicks")
                    val bloccati = jsonObj.getInt("bloccati")
                    val totalClicksAdwords = jsonObj.getInt("totalClicksAdwords")




                    clicksNumber  = clicks.length()

                    if (clicksNumber.toString() == ""){
                        clickCountTraffic = "0"
                    } else {
                        clickCountTraffic = clicksNumber.toString()
                    }

                    var clickString = clicks.toString()
                    Log.d("array", "$clickString")
//                    Log.d("count", "$clickCount")
                    Log.d("clicks", "$clicks")

                    for (i in 0 until clicks.length()) {
                        val item = clicks.getJSONObject(i)
                        Log.d("item","$item")
                        Log.d("item",item.getString("id"))

                        var click = TrafficClick(
                            item.getString("id"),
                            item.getString( "ip"),
                            item.getString( "adwords"),
                            item.getString( "browser"),
                            item.getString( "keyword"),
                            item.getString( "id_campaign"),
                            item.getString( "os"),
                            item.getString( "mobile"),
                            item.getString( "guid"),
                            item.getString( "referer"),
                            item.getString( "from_referer"),
                            item.getString( "organization"),
                            item.getString( "data_creation"),
                            item.getString( "data_update"),
                            item.getString( "eliminato"),
                            item.getString( "counter"),
                            item.getString( "id_dominio"),
                            item.getString( "id_geo_ip"),
                            item.getString( "iso_code")
                        )

                        (clickArray!! as ArrayList).add(click)
                    }

                    Log.d("clicks", "$clickArray")

                    totalClicksTraffic = clickCountTraffic.toString()
                    totalClickAdwordsTraffic = totalClicksAdwords.toString()
                    totalBlockedTraffic = bloccati.toString()

                },

                Response.ErrorListener { response ->
                    Log.d("Test", "ERRORE ---- ${response.printStackTrace()}")


                }
            )
            //aggiunta al queue della stringa precedentemente formata
            queue.add(stringRequest)
            Log.d("Test", "URL ---- $requestUrl")
            Log.d("Test", "CHANGEDATA ---- $changeDataTraffic")



        //appbar per la navigacione tra le pagine
        val navView: BottomNavigationView = findViewById(R.id.nav_view)
        val navController = findNavController(R.id.nav_host_fragment)
        AppBarConfiguration(
            setOf(
                R.id.navigation_traffic,
                R.id.navigation_ipblocked,
                R.id.navigation_search_terms,
                R.id.navigation_settings
            )
        )
        navView.setupWithNavController(navController)
    }


}

Это фрагмент, в который я должен поместить представление рециркулятора:

@file:Suppress("DEPRECATION")

package com.example.example.ui.traffic

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.example.*
import kotlinx.android.synthetic.main.fragment_settings.view.*
import kotlinx.android.synthetic.main.fragment_traffic.*

@Suppress("DEPRECATION")
class TrafficFragment : Fragment() {

    private lateinit var trafficViewModel: TrafficViewModel

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        trafficViewModel =
            ViewModelProviders.of(this).get(TrafficViewModel::class.java)
        val root = inflater.inflate(R.layout.fragment_traffic, container, false)

        if (MainActivity.totalClicksTraffic != null) {
            //numero total clicks
            val totalClicksNumero: TextView = root.findViewById(R.id.numeroTotalClicks)
            trafficViewModel.text.observe(
                viewLifecycleOwner,
                Observer {
                    totalClicksNumero.text = MainActivity.totalClicksTraffic
                }
            )
            if(MainActivity.totalClicksTraffic != "" && MainActivity.totalClicksTraffic != null && MainActivity.totalClicksTraffic != "0"){
                val dataTextHidden: TextView = root.findViewById(R.id.noDataFound)
                trafficViewModel.text.observe(
                    viewLifecycleOwner,
                    Observer {
                        dataTextHidden.text = ""
                    }
                )
            }
        }

        if (MainActivity.totalBlockedTraffic != null) {
            //numero ips blocked
            val ipsBlockedNumber: TextView = root.findViewById(R.id.numeroIpsBlocked)
            trafficViewModel.text.observe(
                viewLifecycleOwner,
                Observer {
                    ipsBlockedNumber.text = MainActivity.totalBlockedTraffic
                }
            )
        }

        if(MainActivity.totalClickAdwordsTraffic != null) {
            //numero totale adwords clicks
            val totalClicksAdwords: TextView = root.findViewById(R.id.numeroClicksAdwords)
            trafficViewModel.text.observe(
                viewLifecycleOwner,
                Observer {
                    totalClicksAdwords.text = MainActivity.totalClickAdwordsTraffic
                }
            )
        }

        val todayButtonTraffic: Button = root.findViewById(R.id.todayButton)
        todayButtonTraffic.setOnClickListener {
            MainActivity.changeDataTraffic = "1"
            val intent = Intent(activity, MainActivity::class.java)
            intent.putExtra(MainActivity.changeDataTraffic , "1")
            startActivity(intent)
        }

        val yesterdayButtonTraffic: Button = root.findViewById(R.id.yesterdayButton)
        yesterdayButtonTraffic.setOnClickListener {
            MainActivity.changeDataTraffic = "2"
            val intent = Intent(activity, MainActivity::class.java)
            intent.putExtra(MainActivity.changeDataTraffic , "2")
            startActivity(intent)
        }

        val lastWeekButtonTraffic: Button = root.findViewById(R.id.lastWeekbutton)
        lastWeekButtonTraffic.setOnClickListener {
            MainActivity.changeDataTraffic = "3"
            val intent = Intent(activity, MainActivity::class.java)
            intent.putExtra(MainActivity.changeDataTraffic , "3")
            startActivity(intent)
        }

        val lastMonthButtonTraffic: Button = root.findViewById(R.id.lastMonthButton)
        lastMonthButtonTraffic.setOnClickListener {
            MainActivity.changeDataTraffic = "4"
            val intent = Intent(activity, MainActivity::class.java)
            intent.putExtra(MainActivity.changeDataTraffic , "4")
            startActivity(intent)
        }

        val recyclerTraffic: RecyclerView = root.findViewById(R.id.recyclerViewTraffic)
       recyclerTraffic.apply {
           layoutManager = LinearLayoutManager (this@TrafficFragment.context)
           Log.d("DEBUG", MainActivity.clickArray.toString()) 
            adapter  = TrafficAdapter(MainActivity.clickArray){
                startActivity(Intent(activity, ClickDetail::class.java))
            }
        }


        return root
    }
}

Я также создал адаптер и не могу понять, почему это не работает Похоже, переработчик не прикреплен к фрагменту.

Адаптер:

package com.example.example

import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.traffic_recycler_layout.view.*

class TrafficAdapter(private val trafficClick: List<TrafficClick>, val clickDetail: () -> Unit) :
RecyclerView.Adapter<TrafficAdapter.ViewHolder>(){

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val layoutView = LayoutInflater.from(parent.context).inflate(R.layout.traffic_recycler_layout, parent, false)
        return ViewHolder(layoutView)
    }

    override fun getItemCount(): Int = MainActivity.clickArray.size
//      if (MainActivity.clickCountTraffic == ""){
//          return 0
//      } else {
//          var clickCount = MainActivity.clickCountTraffic!!.toInt()
//          Log.d("textadapter", "$clickCount")
//          return clickCount
//      }
//    }


    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val clicks = trafficClick[position]
        holder.view.indirizzoIp.text = "${clicks.ip}"
        holder.view.isp.text= "${clicks.organization}"
        holder.view.data.text = "${clicks.data_creation}"
        holder.view.numberText.text = "${clicks.id_campaign}"
//        holder.view.flagImage.setImageDrawable(holder.view.context.getDrawable(clicks.counter))
        holder.view.setOnClickListener {
            clickDetail.invoke()
        }
    }


    class ViewHolder(val view: View) : RecyclerView.ViewHolder(view)


}

Пожалуйста, помогите мне, я понятия не имею, где проблема. Может быть, переработчик прикреплен к чему-либо, или, может быть, он не имеет нужной длины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...