Я новичок 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)
}
Пожалуйста, помогите мне, я понятия не имею, где проблема. Может быть, переработчик прикреплен к чему-либо, или, может быть, он не имеет нужной длины.